別のクラス Form のオブジェクトへのメンバー属性ポインターを持つクラス Agent があります。
Agent.h
...//snip includes
class Agent{
private:
Form* mvForm_ptr;
...
public:
Agent();
~Agent();
...//snip additional functionality, but no copy-constructor
};
エージェント.cpp
#include "Agent.h"
Agent::Agent(){
mvForm_ptr = new Form();
}
Agent::~Agent(){
delete mvForm_ptr;
}
...
ご覧のとおり、Agent の明示的なコピー コンストラクターはありません。その後、次のように Agent を使用します。
Agent player;
std::vector<Agent> agentsVector;
agentsVector.push_back(player);
これは、~Agent が EXC_BAD_ACCESS 例外をスローしているとエラー レポートが主張する SIGSEGV クラッシュの原因のようです。ここでvector::push_back を読むと、push_back が渡された値をコピーしようとしているようです。クラス Agent にコピー コンストラクターがないため、暗黙のコピー試行時にフォーム ポインターはどうなりますか? コンパイラによって生成された暗黙的なコピー コンストラクターでポイント先の値が失われた場合、明示的なコピー コンストラクターを追加すると、不正なアクセス例外が解決されますか? 上記のクラス Agent のコピー コンストラクターはどのように実装する必要がありますか? これは 3 のルールで説明されている前提の例ですか?