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

标签 c++ copy-constructor igraph

我有以下问题。我在必须用 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/

相关文章:

c++ - 为 STL 容器重载 "new"?

c++ - 如何控制QSplashscreen的定位?

c++ - C++11 中的复制初始化对 move 有效吗?

r - 根据父/子/兄弟关系从树中修剪/检索节点

r - Boggle作弊......呃......用R中的图表解决

r - 如何迭代地定义映射参数到契约(Contract)顶点链?

c++ - 虚拟功能及其开销

c++ - 用 memcopy、memmove 或 std :copy? 替换 For 循环

c++ - 我打算调用 initializer_list 构造函数,如果存在 : why?,则预先调用复制构造函数

c++ - std::is_copy/move_constructible 失败,即使复制/移动构造函数是默认的