开发者

how to write a constructor

is that correct to write a constructor like this?

class A
{
    A(const A& a)
    {
    ....
  开发者_如何学Go  }
};

if yes, then is it correct to invoke it like this:

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

if not, what do you suggest?

Thanks


Almost correct. When declaring the constructor in the class, simply write A, not A::A; you would use A::A when giving a definition for the constructor outside of the class declaration. Otherwise, yes.

Also, as James points out, unless you are copying from an object that you are accessing via a pointer, you don't need to do any dereferencing (if it is a value or a reference). One typically does not use pointers unless it is necessary to do so. On that principle, you would have something like:

 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.

Note, though, that the first statement A x invokes the default constructor. C++ will provide a default implementation of that constructor, but it might not be what you want and even if it is what you want, it is better style, IMHO, to give one explicitly to let other programmers know that you've thought about it.

Edit
C++ will automatically provide an implementation of the default constructor, but only if you don't provide any user-defined constructors -- once you provide a constructor of your own, the compiler won't automatically generate the default constructor. Truth be told, I forgot about this as I've been in the habit of giving all constructor definitions myself, even when they aren't strictly necessary. In C++0x, it will be possible to use = default, which will provide the simplicity of using the compiler-generated constructor while at the same time making the intention to use it clear to other developers.


No, you are writing a copy constructor. It will not act as you expect (according to the examples provided).

class A{

   A(arguments){ ...}
}

I would suggest reading a C++ book, differences between a constructor and a copy constructor are well explained.

When is it used ? When an instance is copied. For example, by returning /passing an instance by value

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

A bar(){

  return a; //Copy constructor will be called 
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜