自动删除集合的实例,如std:list或std :: vector?

时间:2014-03-28 11:03:07

标签: c++ c++11

我有一组指针,例如std::vector<std::string*>

删除集合时,哪种方法是自动删除其项目所指向的实例?

当我删除集合时,我会自动删除所有指向的项目。

3 个答案:

答案 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 ++指针就没有析构函数。