これは本当にばかげた/基本的な質問かもしれませんが、私はそれを理解することはできません. 私の考えをお伝えします。間違っている場合は訂正してください。
生のポインタを格納するために STL コンテナを使用している場合、それらの後のクリーンアップに注意する必要があります。
std::list<animal*> alist;
animal *a = new animal();
alist.push_back(a);
...
animal *b = alist.front();
alist.pop_front();
//do stuff with b
delete b;
オブジェクトを保存するとどうなりますか? オブジェクトでいっぱいのコンテナが範囲外になると、その中のすべてのオブジェクトが破棄されることを私は理解しています。正しい?
std::list<T>.pop_front()
しかし、たとえば、コンテナからオブジェクトを削除するとどうなるでしょうか?
std::list<animal> alist;
{
animal ani();
//ani is inserted at the end of the list (it IS ani rather than a copy
//since push_back accepts const T&)
alist.push_back(ani);
} //nothing is deallocated/destroyed here
...
{
animal b = alist.front(); //b is now a copy(?!) of the front element
//created via copy constructor
alist.pop_front(); //the front element of the list is
//destroyed/destructor is called
//do stuff with b
} //b goes out of scope