【发布时间】:2014-08-13 08:00:29
【问题描述】:
我对 C++ 还很陌生,所以我有这个问题: 我知道 stl 容器不会从堆指针中释放内存,需要自己释放它,而且我知道容器调用被删除对象的析构函数,但是说我们有这个抽象代码:
Object* pObject = new Object();
vector<Object>[i] = *pObject;
现在向量被销毁后,它实际上会释放 pObject 指向的内存吗?或者它只会调用 Object 的析构函数,使其无效并将内存标记为“已占用”以供内存管理器使用?
谢谢。
【问题讨论】:
-
怎么可能?容器实际上并不包含指针,而是
pObject指向的对象的副本。 -
您没有发布可以编译的代码,但假设您的意思类似于
vector<Object> v; ...populate at least i+1 elements...; v[i] = *pObject;,那么分配时pObject的值将被复制到vector中索引[i],然后vector拥有该值的副本,但不拥有仍由pObject寻址的对象,用户代码仍必须为delete。 -
如果你使用
vector<unique_ptr<Object>>它会
标签: c++ memory memory-management