Init.当COPY CTOR是私有的时候

Init. static members while COPY CTOR is private

本文关键字:COPY CTOR Init      更新时间:2023-10-16

我有一个类X,我的目标是有一个特殊的变量来表示"坏对象",以便实现一个返回X&的函数。
例如:

//X.h
class X{
private:
  int i;
  X(const X& other){} //private COPY CTOR
public:
  const static X& badObject;
  X(int a) : i(a) {} // the only CTOR
  const X& f(){
   if(true)
    //return some valid X object
   else
      return badObject;
};

唯一的CTOR不是默认的CTOR, COPY CTOR是私有的(我不想允许复制这个对象)。Operator=也是私有的。
现在,当我尝试init。我得到一个错误:

//X.cpp
#include "X.h"
const X& X::badObject = X(1);

因为COPY CTOR是私有的。

我在这里做错了什么?我该怎么做才能解决这个问题?
谢谢!

将声明改为

const static X badObject;

的定义

const X X::badObject(1);

这将只创建一个badObject实例。由于您的函数通过ref返回其值,因此不需要复制构造函数或其他任何东西。