代码之家  ›  专栏  ›  技术社区  ›  Nima

如何编写构造函数

  •  0
  • Nima  · 技术社区  · 16 年前

    class A
    {
        A(const A& a)
        {
        ....
        }
    };
    

    如果是,那么这样调用是否正确:

    A* other;
    ...
    A* instance = new A(*(other));
    

    谢谢

    2 回复  |  直到 14 年前
        1
  •  4
  •   Michael Aaron Safyan    16 年前

    A ,不是 A::A A::A

    另外,正如James指出的,除非您是从通过指针访问的对象复制,否则您不需要进行任何取消引用(如果它是值或引用)。除非有必要,否则通常不使用指针。根据这个原则,你会有这样的结果:

     A x; // Invoke default constructor
     // ...
     // do some thing that modify x's state
     // ...
    
     A cpy(x); // Invokes copy constructor
               // cpy now is a copy of x.
    

    A x 调用默认构造函数。C++将提供那个构造函数的默认实现,但它可能不是你想要的,即使它是你想要的,最好是一个明确的风格,让其他程序员知道你已经考虑过了。

    编辑
    C++将自动提供默认构造函数的实现,但是只有当您不提供任何用户定义的构造函数时,一旦提供了自己的构造函数,编译器就不会自动生成默认构造函数。说实话,我忘记了这一点,因为我习惯于自己给出所有构造函数定义,即使它们不是严格必要的。在C++ 0x中,可以使用 = default ,这将提供使用编译器生成的构造函数的简单性,同时使其他开发人员清楚地了解使用它的意图。

        2
  •  0
  •   Tom    16 年前

    不,您正在编写一个复制构造函数。它不会像您期望的那样(根据提供的示例)。

    class A{
    
       A(arguments){ ...}
    }
    

    我建议阅读C++书籍,解释构造函数和复制构造函数之间的区别。

    什么时候用?复制实例时。例如,通过按值返回/传递实例

    void foo (A a){ 
      //copy constructor will be called to create a
    }
    
    A bar(){
    
      return a; //Copy constructor will be called 
    }