我有一个类,代理,其成员属性指针指向另一个类的对象,形式:
代理.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 player;
std::vector<Agent> agentsVector;
agentsVector.push_back(player);
这似乎是 SIGSEGV 崩溃的原因,其错误报告声称 ~Agent 正在引发 EXC_BAD_ACCESS 异常。在这里阅读 vector::push_back似乎 push_back 试图复制传入的值。由于我在代理类中没有复制构造函数,所以在隐式复制尝试时表单指针会发生什么情况?如果指向的值在编译器生成的隐式复制构造函数中丢失,添加显式复制构造函数会解决错误的访问异常吗?上面的 Agent 类的复制构造函数应该如何实现?这是三法则所描述的前提的一个例子吗?