int a, b, c;
auto stackvec = new vector<int*> { &a, &b, &c };
auto heapvec = new vector<int*> { new int, new int, new int };
delete stackvec;
delete heapvec;
如果在 vector* 上对它们持有的指针调用 vector* 时调用 delete ,则'd be in for a heap of trouble (pun intended) because you'd将自动变量 delete 与第一个 delete 产生未定义的行为(这是一件坏事) .
2 回答
不,这就是原因 .
考虑这两种情况:
如果在
vector*
上对它们持有的指针调用vector*
时调用delete
,则'd be in for a heap of trouble (pun intended) because you'd将自动变量delete
与第一个delete
产生未定义的行为(这是一件坏事) .当你知道它们被动态分配时,你必须自己手动迭代
vector
和delete
指针,或者更好,使用std::unique_ptr
你永远不需要在任何东西上调用delete
.此外,您可能首先不需要指向
vector
的指针,但我知道了您的情况't judge you since I don't .对于
std::array
和std::vector
,您需要在编译时知道std::array
的大小,并且无法在运行时调整大小,但vector
没有这些限制 .不,你会有内存泄漏 .
不,指针容器不会删除指向的对象 .
使用Boost,它拥有拥有数据的指针容器 .
boost::ptr_vector<int>