有没有办法检查在C ++中复制或分配对象是否安全?

时间:2010-11-26 16:56:54

标签: c++ copy-constructor igraph

我有以下问题。我在c ++中必须使用的程序中使用C库igraph(http://igraph.sourceforge.net/)。所以我在一个名为Graph的类中找到了这个C库(http://code.google.com/p/igraphhpp/)的c ++包装器,它提供了一些我想要使用的好界面。

我的课程中有以下课程:

class Agent 
{
private: 
  double beta;  
  Graph * innerGraph;
public:
  Agent(int N, double beta_) {
    innerGraph = new Graph;
    *innerGraph = Graph::full(N);
    beta = beta_;
  };
  ~Agent() {delete innerGraph;}
  void MCStep();
};

MCStep()函数必须执行以下操作:

  • 制作*innerGraph
  • 中包含的图表的副本
  • 为此副本做一些事情,而不改变原文,
  • 检查更改的副本是否满足某些条件,如果是,则使用此新修改的图表更新*innerGraph

如果我知道该库实现了一个安全的拷贝构造函数,我会以显而易见的方式进行,但我不知道。我怎么检查呢?

2 个答案:

答案 0 :(得分:2)

检查Graph的来源,查看复制构造函数是否调用此函数:

http://igraph.sourceforge.net/doc/html/ch04s02s01.html#igraph_copy

没有一般方法 - C ++语言本身对“深拷贝”或“浅拷贝”一无所知,因此就所关注的问题而言,拷贝构造函数与它完全相同。在一个理想的世界中,任何发布这样的C ++包装器的人都会记录它,在这种情况下,可能应该使它成为一个完整的深层副本。

答案 1 :(得分:1)

由于你正在使用指向Graph的指针,你不能只是在第3步交换指针吗? (不要忘记在交换后删除临时)