1
나는 벡터의 벡터에 스마트 포인터를 사용하면 문제가 발생하는지 궁금합니다. 다른 컨테이너를 포함한 파생 된 객체를 보유 할 컨테이너 객체를 만들고 있습니다. 사용하고 싶습니다. 자체 삭제를위한 스마트 포인터를 사용하고 unique_ptr을 단일 소유권으로 사용하려고했지만이 경우에는 사용할 수 없습니다.스마트 포인터 또는 벡터의 벡터에 대한 일반 포인터
각 컨테이너에는 크기가 있으므로 마지막 컨테이너에 첫 번째 컨테이너를 포함 할 수 없으므로 shared_pt에 대한 읽기 문제가 발생하지 않습니다.
class Base{...}
class Item:public Base{...}
class Container : public Base{
//int size;
vector<shared_ptr<Base>>vec;
public:
template <typename D>
void AddItem(const D& thing) {
vec.push_back(make_shared<D>(thing));
}
};
Container bag;
Item thing;
Container bag2;
bag2.AddItem<Item>(thing);
bag.AddItem<Container>(bag2);
// _________________________
관련,하지 왜이 일 첫 번째 경우에
class Container :public Base{
vector<Base*>slot;
public:
~Container(){}
void Add(Base* thing){ slot.push_back(thing); }
void Delte_All()
{
for(int i=0;i<slot.size();++i)
{
delete slot[i];
cout << "Object " << i << " deleted" <<endl;
}
slot.clear();
}
};
int main()
{
Container bag;
Container bag2;
Base* thing=&bag2;
bag.Add(thing);
bag.Delte_All();
return 0;
}
스마트 포인터와
당신은'std :: vector >>'을 사용할 수 있습니다. –