【问题标题】:Is there a way to check if its safe to copy or assign an object in C++?有没有办法检查在 C++ 中复制或分配对象是否安全?
【发布时间】:2011-05-16 06:57:52
【问题描述】:

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

如果我知道库实现了一个安全的复制构造函数,我会以显而易见的方式来做,但我没有。如何查看?

【问题讨论】:

    标签: c++ copy-constructor igraph


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-07-27
        • 1970-01-01
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 2021-08-11
        • 2014-11-14
        • 2011-02-19
        相关资源
        最近更新 更多