我正在尝试创建一堆共享指针并将它们放入各种容器中。
使用原始指针我会考虑执行以下操作:
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));
答案 0 :(得分:7)
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。