このコードを MS Visual Studio 10 で実行しています。
#include <iostream>
#include <memory>
using namespace std;
class A
{
int i;
public:
A(int j) : i(j) {}
~A() {}
void fun()
{
cout << "A::i = " << i << endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A aObj(12);
std::shared_ptr<A> const pObj (&aObj,
[] (A* pA) {
cout << "lambda deleter" << endl;
});
aObj.~A();
pObj->fun();
return 0;
}
これは、すでに削除されているオブジェクトのデータ メンバーを出力/保持しますが、エラーは報告されません。
記入してください:
shared_ptr
pObj が (実行時に) 基になるオブジェクトが既に削除されていることを報告しないのはなぜですか?- 私は const shared_ptr を作成しているので、それを使用して他のオブジェクトを参照することはできません。オブジェクトの削除時にラムダが呼び出されないのはなぜですか。
weak_ptr
同様のケースで役立ちます。weak_ptr
オブジェクトへの参照の存続期間は、参照先のオブジェクトよりも長生きするというセマンティクスで使用されます。