使用 std::shared_ptr 时有效地保存 memory/programming

Conserving memory/programming efficiently when using `std::shared_ptr`

我正在尝试创建一堆共享指针并将它们放入各种容器中。

使用原始指针我想做以下事情:

Container a, b, c;
MyClass *ptr;
while(!finishedCreating){
    ptr = new MyClass(SOME_CHANGING_THING);
    a.add(ptr);
    b.add(ptr);
    c.add(ptr);
}

但当然现在如果我想破坏 abc,我需要删除它们包含的指针。如果我执行以下操作:

~Container{
    delete[] myListOfPointers;
}

我在析构时会出错,因为删除 a 会删除 bc 应该删除的相同内存。

输入智能指针,具体来说,std::shared_ptr。我想做一些类似于之前的事情,我可以创建一个实体并用它来指向大量的内存位置,但我不确定该怎么做?

我是否要创建一个指向 std::shared_ptr 的指针,以便我可以重新分配该指针,例如

std::shared_ptr<MyClass> *ptr = new std::shared_ptr<MyClass>(new MyClass(THING));

shared_ptr 是来给你分配内存的...不要和他们一起使用 new !

基本用法是:

std::shared_ptr<MyClass> ptr(new MyClass(THING));

但更好的是:

auto ptr = std::make_shared<MyClass>(THING);

后者为异常处理提供了更多保证,并确保您不会再使用 new

您的容器现在将类似于:

typedef std::vector<std::shared_ptr<MyClass>> Container;

有关详细信息,请阅读 shared_ptr on cppreference