我试图了解一个简单的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 ] 。他们为什么要宣布它?
答案 0 :(得分:2)
我不明白复制contstructor。为什么他们会增加呢?
通过调用复制构造函数构造的对象应计为构造的对象。
您的示例有效,因为它不使用复制构造函数。
使用:
X x;
X xx(x);
看到差异。
答案 1 :(得分:1)
否则,默认情况下会生成复制构造函数,但不会计算创建的对象,例如
X x1;
X x2(x1);
是的,演示没有它,但不能以正确的方式计算对象。