new的时候,在所分配的内存的前面放了一个count,
然后delete时,这个count会传给迭代器,循环调用析构
这个是你需要的答案,里面的reinterpret_cast<size_t*>(this) - 1,就是count的地址。
https://ofekshilon.com/2014/06/09/on-vector-deleting-destructors-and-some-newdelete-internals/
要自己从头分析的话,写个调用new、delete[]的小程序,然后以汇编模式单步debug到编译器生成的inline函数和CRT函数的内部就知道了
struct Info {
int a;
std::string b;
};
int main()
{
const auto p = new Info[5];
delete[]p;
reutrn 0;
}
【 在 stub 的大作中提到: 】
: free一个指针很容易实现,关键是delete数组 怎么知道大小
--
FROM 221.218.160.*