我有以下问题。我在必须用 C++ 编写的程序中使用 C 库 igraph (http://igraph.sourceforge.net/)。所以我找到了这个 C 库的 c++ 包装器 (http://code.google.com/p/igraphhpp/),它在一个名为 Graph 的类中提供了一些我想使用的不错的接口(interface)。
我的程序中有以下类(class):
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
中的Graph, - 在不改变原件的情况下对这个拷贝做一些事情,
- 检查更改后的拷贝是否满足某些条件,如果是,则用这个新的修改后的图更新
*innerGraph
。
如果我知道这个库实现了一个安全的复制构造函数,我会以显而易见的方式去做,但我不知道。如何检查?
最佳答案
查看Graph的源码,复制构造函数是否调用了这个函数:
http://igraph.sourceforge.net/doc/html/ch04s02s01.html#igraph_copy
没有通用的方法 - C++ 语言本身对“深拷贝”或“浅拷贝”一无所知,因此就这点而言,拷贝构造函数对它来说都是一样的。在理想的世界中,任何发布像这样的 C++ 包装器的人都会记录它,在这种情况下可能应该使它成为一个完整的深层拷贝。
关于c++ - 有没有办法检查在 C++ 中复制或分配对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287189/