c++ - 如果我在指向 vector std::vector<Object*>* 的指针上调用 "delete",元素也会被删除吗?

标签 c++ memory allocation

<分区>

Possible Duplicate:
C++ Vector Pointers to Objects
Does std::list::remove method call destructor of each removed element?

如果我有一个 std::vector 定义为:

std::vector<Object*>* myObjects;

然后调用:

delete myObjects;

那么myObjects中的元素会不会也被删除?使用 std::array 或任何其他 STL 容器有什么不同吗?

提前致谢

最佳答案

不,这就是原因。

考虑这两种情况:

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* 上调用 delete 并在它们持有的指针上调用 delete,那么你会遇到一堆麻烦(双关语意),因为您将 delete 与第一个 delete 自动变量,这会产生未定义的行为(一件坏事)。

当您知道指针是动态分配的时,您必须自己手动迭代 vectordelete 指针,或者更好的是,使用 std::unique_ptr 并且您永远不需要对任何内容调用 delete

此外,您可能一开始就不需要指向 vector 的指针,但我不会对您进行评判,因为我不知道您的情况。

至于std::arraystd::vector,你需要在编译时知道你的std::array 的大小时间并且您不能在运行时调整它的大小,但是 vector 没有这些限制。

关于c++ - 如果我在指向 vector std::vector<Object*>* 的指针上调用 "delete",元素也会被删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106073/

相关文章:

javascript - 如何在 Qt Creator 中的 main.cpp 文件之外声明函数

c++ - 指向结构的指针如何工作?

ios - iOS 8.1 iPad Air 2-图像加载内存错误

C++ Pop函数链表

C++字符串流忽略()不起作用

c++ - 当阶乘对于 C++ 中的 int 来说太大时如何处理?

c++ - 可能丢失在 pthread_create 的丢失记录中

iphone - iPhone中的内存分配

链表中的连续动态内存分配

未初始化变量的 C++ 内存分配(32 位机器)