删除基于堆的对象后,stl容器会释放内存吗? 我对C++比较陌生,所以我有这个问题: 我知道stl容器不会从堆指针释放内存,我们需要自己释放内存,我知道容器调用被删除对象的析构函数,但我们有以下抽象代码: Object* pObject = new Object(); vector<Object>[i] = *pObject; Object*poobject=new Object(); 向量[i]=*pObject;

删除基于堆的对象后,stl容器会释放内存吗? 我对C++比较陌生,所以我有这个问题: 我知道stl容器不会从堆指针释放内存,我们需要自己释放内存,我知道容器调用被删除对象的析构函数,但我们有以下抽象代码: Object* pObject = new Object(); vector<Object>[i] = *pObject; Object*poobject=new Object(); 向量[i]=*pObject;,c++,memory,memory-management,C++,Memory,Memory Management,现在,在向量被销毁之后,它会释放指向的内存对象吗?或者它只是调用对象的析构函数,使其无效,并将内存标记为“已占用”以供内存管理器使用 谢谢。您有一个向量,因此,对象的向量不是对象*。在这种情况下,根本不需要新的 标准容器将管理它们分配的内存,而不是您的。如果您有一个指向已newed对象的指针容器,那么在容器超出范围之前,您需要删除它们 如果您希望容器(与一些盟友)为您管理内存,请使用std::shared_ptr或std::unique_ptr。如果您的编译器还不支持C++11,则有boost和

现在,在向量被销毁之后,它会释放指向的内存对象吗?或者它只是调用对象的析构函数,使其无效,并将内存标记为“已占用”以供内存管理器使用

谢谢。

您有一个
向量
,因此,
对象的
向量
不是
对象*
。在这种情况下,根本不需要新的

标准容器将管理它们分配的内存,而不是您的。如果您有一个指向已
new
ed对象的指针容器,那么在容器超出范围之前,您需要
删除它们

如果您希望容器(与一些盟友)为您管理内存,请使用
std::shared_ptr
std::unique_ptr
。如果您的编译器还不支持C++11,则有
boost
tr1
等同物

std::vector<std::shared_ptr<Object>> container;
std::向量容器;
容器将管理智能指针,智能指针反过来管理内存。

您有一个
向量
,因此,
对象的
向量
不是
对象*
。在这种情况下,根本不需要新的

标准容器将管理它们分配的内存,而不是您的。如果您有一个指向已
new
ed对象的指针容器,那么在容器超出范围之前,您需要
删除它们

如果您希望容器(与一些盟友)为您管理内存,请使用
std::shared_ptr
std::unique_ptr
。如果您的编译器还不支持C++11,则有
boost
tr1
等同物

std::vector<std::shared_ptr<Object>> container;
std::向量容器;
容器将管理智能指针,智能指针反过来管理内存。

您有一个
向量
,因此,
对象的
向量
不是
对象*
。在这种情况下,根本不需要新的

标准容器将管理它们分配的内存,而不是您的。如果您有一个指向已
new
ed对象的指针容器,那么在容器超出范围之前,您需要
删除它们

如果您希望容器(与一些盟友)为您管理内存,请使用
std::shared_ptr
std::unique_ptr
。如果您的编译器还不支持C++11,则有
boost
tr1
等同物

std::vector<std::shared_ptr<Object>> container;
std::向量容器;
容器将管理智能指针,智能指针反过来管理内存。

您有一个
向量
,因此,
对象的
向量
不是
对象*
。在这种情况下,根本不需要新的

标准容器将管理它们分配的内存,而不是您的。如果您有一个指向已
new
ed对象的指针容器,那么在容器超出范围之前,您需要
删除它们

如果您希望容器(与一些盟友)为您管理内存,请使用
std::shared_ptr
std::unique_ptr
。如果您的编译器还不支持C++11,则有
boost
tr1
等同物

std::vector<std::shared_ptr<Object>> container;
std::向量容器;

容器将管理智能指针,而智能指针反过来管理内存。

您实际上不是将
pObject
放置在
std::vector
中,而是放置
pObject
指向的对象的副本。因此,
std::vector
*pObject
中的对象将完全不同


std::vector
被销毁时,它将调用该对象副本的析构函数,但原始对象将不受影响。也就是说,
pObject
仍将指向一个有效的对象,并且必须分别被
delete
'd。

您实际上没有将
pObject
放置在
std::vector
中,而是放置了
pObject
指向的对象的副本。因此,
std::vector
*pObject
中的对象将完全不同


std::vector
被销毁时,它将调用该对象副本的析构函数,但原始对象将不受影响。也就是说,
pObject
仍将指向一个有效的对象,并且必须分别被
delete
'd。

您实际上没有将
pObject
放置在
std::vector
中,而是放置了
pObject
指向的对象的副本。因此,
std::vector
*pObject
中的对象将完全不同


std::vector
被销毁时,它将调用该对象副本的析构函数,但原始对象将不受影响。也就是说,
pObject
仍将指向一个有效的对象,并且必须分别被
delete
'd。

您实际上没有将
pObject
放置在
std::vector
中,而是放置了
pObject
指向的对象的副本。因此,
std::vector
*pObject
中的对象将完全不同

std::vector
被销毁时,它将调用该对象副本的析构函数,但原始对象将不受影响。也就是说,
pObject
仍将指向一个有效的对象,并且必须单独删除。

它怎么可能?康泰