共有ポインタを保持するvector.clear()を呼び出した後、shared_ptrが所有するオブジェクトのデストラクタが解放されていないことに気付きました。共有ポインタのベクトル、ベクトルをクリアした後のメモリの問題
コード例を以下に示します。 vector.clear()が呼び出されても、共有ポインタがスコープを超えた後に呼び出されるデストラクタは、リセットすることでベクトル内のすべてのスマートポインタを手動で削除する必要がありますか?アドバイスできる簡単な方法はありますか?
Output :
constructor
I am here
destructor
Code:
#include <vector>
#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
A(){cout << "constructor" << endl;};
~A(){cout << "destructor" << endl;};
};
int main()
{
shared_ptr<A> sharedptr (new A);
std::vector<shared_ptr<A> > test;
test.push_back(sharedptr);
test.clear();
cout << "I am here" << endl;
}
あなたの答えは私が探していたものです。どうもありがとう。 –
私は、質問に示されたケースでは、実際には、 'emplace_back'を介してベクター内のベクターを構築する方が好きです。なぜなら、アクセスが可能な名前付き変数(' sharedptr')を避けるためです'std :: move'。 – us2012