在c ++中创建对象的副本

时间:2012-04-09 16:56:11

标签: c++ copy-constructor

我有一个SimpleCircle类。其声明如下:

class SimpleCircle
{
  public:
SimpleCircle();
SimpleCircle(int rad);
SimpleCircle(const SimpleCircle&);
~SimpleCircle();

   SimpleCircle operator++(int);
}

关于我使用的定义:

SimpleCircle SimpleCircle::operator++(int)
{
    SimpleCircle temp(*this);
    ++itsRadius;
    return temp;
}

当我使用时

  

SimpleCircle temp(* this)

,是被调用的复制构造函数还是什么?那里发生了什么?我没有像

这样的构造函数
  

SimpleCircle(SimpleCircle newCircle)

或其他东西(复制构造函数除外)

2 个答案:

答案 0 :(得分:8)

这确实调用了复制构造函数。虽然您没有定义SimpleCircle(SimpleCircle other)构造函数,但您确实已定义SimpleCircle(const SimpleCircle&)。表达式*this可以很容易地映射到该构造函数,因此它就是在这里执行的。

答案 1 :(得分:0)

当然你有一个复制构造函数:那就是SimpleCircle(const SimpleCircle&);

它可能不会将SimpleCircle作为参数,但它需要一个常量引用,这是复制构造函数所需要的。 *this参数返回一个指向调用对象的指针,复制构造函数使用该指针来生成temp