对象引用和对象指针

时间:2011-10-13 08:41:05

标签: c++ visual-c++

如果在复制构造函数的情况下,如果我在参数中使用指针而不是引用变量,会发生什么?对于前

class MyClass
{
private: int a;
         char *str;
public:...
       ...
       MyClass(MyClass *pObj)
       {
          ....
          ....
       }
};

3 个答案:

答案 0 :(得分:4)

  

MyClass(MyClass * pObj)

是复制构造函数,它是重载的构造函数

复制构造函数引用与参数相同的类型。例如:

  

MyClass(MyClass&)

如果您不提供自己的版本,编译器会隐式为您的类生成一个复制构造函数。 当编译器需要生成对象的副本时,将调用此复制构造函数。

上面说的重载构造函数只有在你明确调用它时才会被调用。

Code Sample

#include<iostream>

class MyClass
{
    private: int a;
             char *str;
    public:   
           MyClass(){}        
           MyClass(MyClass *pObj)
           {
               std::cout<<"\ninside *";
           }
           MyClass(MyClass &pObj)
           {
              std::cout<<"\ninside &";
           }    
           void doSomething(MyClass obj)
           {
               std::cout<<"\ndoSomething";
           }
};

int main()
{
      MyClass ob,ob2;
      MyClass obj2(&ob);   //Explicitly invoke overloaded constructor

      ob.doSomething(ob2); //Calls copy constructor to create temp copy of object
      return 0;
}

请注意输出为:

inside *
inside &
doSomething

答案 1 :(得分:1)

根据定义,复制构造函数是具有同一类的const引用参数的构造函数。 任何其他构造函数定义都不是“复制构造函数”,因此当您编写类似的东西时,编译器不会调用它:

MyClass x = y;

MyClass x( y );

答案 2 :(得分:0)

复制构造函数应该从对象而不是从指针复制 为什么通过参考而不是价值?因为如果你不这样做,拷贝构造函数将创建参数的副本,它将是一个无限循环。