彻底销毁动态分配对象的向量

Posted

技术标签:

【中文标题】彻底销毁动态分配对象的向量【英文标题】:Clean destruction of a vector of dynamically alocated objects 【发布时间】:2020-01-10 04:06:41 【问题描述】:

是否有另一种方法可以释放分配对象的内存,而不是遍历向量/列表?

int main()
        
            vector<Class*> v;
            v.push_back(new Class(2,2));
            v.push_back(new Class(65,65));
            v.push_back(new Class(45,23));
            for(Class* &it : v)
               delete it;
            return 0;
        

【问题讨论】:

RAII。 std::vector&lt;std::unique_ptr&lt;Class&gt;&gt; v 完全不使用指针,或者将RAIIstd::unique_ptr 之类的容器一起使用。 或者,您可以简单地使用std::vector&lt;Class&gt; 并避免(可能)不必要的间接。 答案。走。在。这。回答。部分。不难理解。 【参考方案1】:

是的,有。它被称为smart pointers:

std::vector<std::unique_ptr<Class>> v;
v.push_back(std::make_unique<Class>(Class(2,5)));

但是,如果您没有理由使用动态分配的对象,则首选std::vector&lt;Class&gt;

Live

【讨论】:

以上是关于彻底销毁动态分配对象的向量的主要内容,如果未能解决你的问题,请参考以下文章

堆中连续分配对象的动态向量

动态内存

动态内存和智能指针

在删除指向动态分配对象的指针向量中的元素之前,我需要做啥?

动态内存——动态内存与智能指针

CH12 动态内存