[英]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);
}
但是当然,现在如果我想破坏a
, b
和c
,则需要删除它们包含的指针。 如果我执行以下操作:
~Container{
delete[] myListOfPointers;
}
销毁时会出现错误,因为删除a
会删除b
和c
应该摆脱的相同内存。
输入智能指针,特别是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 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.