1

我有以下问题。我在我必须用 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使用此新修改的图形进行更新。

如果我知道库实现了一个安全的复制构造函数,我会以明显的方式来做,但我没有。我怎样才能检查它?

4

2 回答 2

2

查看Graph的源码,看看拷贝构造函数是否调用了这个函数:

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

没有通用的方法——C++ 语言本身对“深拷贝”或“浅拷贝”一无所知,所以就这一点而言,拷贝构造函数对它来说都是一样的。在理想的世界中,任何发布像这样的 C++ 包装器的人都会对其进行记录,在这种情况下,可能应该使其成为完整的深层副本。

于 2010-11-26T17:46:01.080 回答
1

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

于 2010-11-26T17:26:01.437 回答