【发布时间】:2013-03-11 21:42:39
【问题描述】:
我有一个类,Agent,它的成员属性指针指向另一个类的对象,Form:
代理.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);
这似乎是 SIGSEGV 崩溃的原因,其错误报告声称 ~Agent 正在引发 EXC_BAD_ACCESS 异常。阅读 vector::push_back here 似乎 push_back 试图复制传入的值。由于我在代理类中没有复制构造函数,所以在隐式复制尝试时表单指针会发生什么情况?如果指向的值在编译器生成的隐式复制构造函数中丢失,添加显式复制构造函数会解决错误的访问异常吗?上面的 Agent 类的复制构造函数应该如何实现?这是Rule of Three所描述的前提的一个例子吗?
【问题讨论】:
-
这已经被讨论到死了。您应该查找并实施零规则。
标签: c++ memory-management vector stl