#include <iostream>
using namespace std;
class Object{};
class Connection
{
public:
Connection(Object * _obj);
Object * obj;
void status();
};
Connection::Connection(Object * _obj)
{
obj = _obj;
}
void Connection::status()
{
cout << obj << endl;
}
int main() {
Object * myObj = new Object();
Connection * myConn = new Connection(myObj);
delete myObj;
myObj = NULL;
cout << myObj << endl;
myConn->status();
/*
Output is:
0
0x25ec010
but should be:
0
0
*/
}
私はこの例ではポインタで作業していると思っていました。だから、同じアドレスを指す2つのポインタがあるので、 "myConn"のポインタもNULLに設定されていない理由を理解できません。オブジェクトへの2番目のポインタがNULLでなくオブジェクトポインタに設定されているのはなぜですか?
これはどうやってやるの? – ben
これは最良の例ではないかもしれませんが、boost :: shared_ptrはより良い解決策ですが、このコードは動作します: //スキップしました クラスConnection { public: Connection(Object ** _ obj); オブジェクト** obj; void status(); }; Connection :: Connection(Object ** _ obj):obj(_obj) { } void Connection :: status() { cout << * obj << endl; } int main(){ オブジェクト* myObj = new Object(); 接続* myConn =新しい接続(&myObj); //スキップしました – dmirkitanov
@Dmitry M答えを編集するために、このようなコードと改善点を置く方がよいでしょう。そうすれば、より完全になり、適切にフォーマットされます。私はあなたのためにそれを追加しましたが、それがもっとはっきりとできると思ったら編集してください。 – James