使用“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;

有关详细信息,请阅读cppreference上的shared_ptr。

相关内容

  • 没有找到相关文章

最新更新