代码之家  ›  专栏  ›  技术社区  ›  Rafael S. Calsaverini

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

  •  1
  • Rafael S. Calsaverini  · 技术社区  · 15 年前

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

    我的课程中有以下课程:

    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 ,
    • 在不改变原稿的情况下对这本书做些修改,
    • 检查更改后的副本是否满足某些条件,如果满足,则更新 *内图 用这个新的修正图。

    如果我知道这个库实现了一个安全的复制构造函数,我会用显而易见的方法来实现,但我没有。我如何检查它?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Steve Jessop    15 年前

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

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

    没有一般的方法——C++语言本身对“深度拷贝”或“浅拷贝”一无所知,因此复制构造函数对它来说都是相同的。在一个理想的世界里,任何一个像这样发布C++包装的人都会记录它,在这种情况下 应该 做一个完整的深拷贝。

        2
  •  1
  •   hansmaad    15 年前

    既然您使用的是指向图形的指针,那么就不能在步骤3中交换指针吗?(不要忘记在交换后删除临时的)