vector
最近、特定のオブジェクトのポインターの要素にアクセスしようとすると、セグメンテーション違反が継続的に発生する理由について混乱しました。問題を解決することはできませんでしたが、オブジェクト ポインターを にプッシュした後、コピーが保存されていると考えてそれvector
を呼び出したためだと思われます。delete
vector
次のコードでは:
std::vector<SomeObject *> testvector;
SomeObject * testobject = new SomeObject(/* some arguments here, call constructor */)
testvector.push_back(testobject);
delete testobject; // does this affect the element in the vector?
デバッガーは、ベクターに追加されるポインターが実際に適切なデータを持っていることを確認しますが、それらに対して delete を呼び出すと、ベクター内の要素が影響を受けるかどうかはわかりません。ベクターは単なるコピーを保存しますか? オブジェクトで削除を呼び出すと、ベクトル内のポインターで削除が呼び出されているのではないかと思いますが、よくわかりません。
delete を呼び出した後、ベクトル内のデータを出力しようとしましたが、次のようになりました: ??? ?? ???? ???
そして、削除の呼び出しがベクター要素に影響を与えたと想定しています。これは事実ですか?ベクターにポインターを追加した後、ベクター内の要素に影響を与えずにオブジェクトを安全に解放できると思っていましたが、割り当てられなくなったメモリにアクセスしてしまうようです。delete の呼び出しはベクトル内のポインターに影響しますか?