我有一组指针,例如std::vector<std::string*>
。
删除集合时,哪种方法是自动删除其项目所指向的实例?
当我删除集合时,我会自动删除所有指向的项目。
答案 0 :(得分:8)
确保容器元素被正确销毁的最简单方法是存储对象,而不是指针。
如果你真的需要指针(也许是多态),那么存储智能指针 - 通常是std::unique_ptr
,但是如果你需要共享所有权,或者你需要共享所有权,可能是std::shared_ptr
(或者它的TR1或Boost等价物)坚持使用2011年之前的编译器。
不要试图兼顾原始指针 - 这是内存泄漏的一个秘诀,更糟糕。
答案 1 :(得分:1)
您可以使用std::shared_ptr
(请参阅here)
示例:
class A { ... };
{
std::list<std::shared_ptr<A>> data;
data.push_back(std::make_shared<A>()); // add element to the list
}
// at this point data is deleted and all created class instanced with it
另一种方法是使用正确的RAII。这意味着类析构函数负责删除所有获取的资源。您可以在容器中按值存储实例化。
答案 2 :(得分:1)
项目会自动删除。
例如,对于std::vector<std::string>
,将调用std::string
的每个实例的析构函数。
如果你问过实例指针,那么C ++指针就没有析构函数。