了解CRTP示例中的copy-constructor

时间:2015-12-29 04:41:22

标签: c++ copy-constructor

我试图了解一个简单的CRTP用例。以下是DEMO

中的示例
template <typename T>
struct counter
{
    static int objects_created;
    static int objects_alive;

    counter()
    {
        ++objects_created;
        ++objects_alive;
    }

    counter(const counter&)
    {
        ++objects_created;
        ++objects_alive;
    }
protected:
    ~counter() // objects should never be removed through pointers of this type
    {
        --objects_alive;
    }
};
template <typename T> int counter<T>::objects_created( 0 );
template <typename T> int counter<T>::objects_alive( 0 );

class X : counter<X>
{
    // ...
};

我不理解复制结构。为什么他们会增加呢?此外,我删除了它,示例也正常工作 [ event loop ] 。他们为什么要宣布它?

2 个答案:

答案 0 :(得分:2)

  

我不明白复制contstructor。为什么他们会增加呢?

通过调用复制构造函数构造的对象应计为构造的对象。

您的示例有效,因为它不使用复制构造函数。

使用:

X x;
X xx(x);

看到差异。

答案 1 :(得分:1)

否则,默认情况下会生成复制构造函数,但不会计算创建的对象,例如

X x1;
X x2(x1);

是的,演示没有它,但不能以正确的方式计算对象。