【发布时间】:2015-01-12 19:13:53
【问题描述】:
已删除隐式声明的复制赋值运算符 类 T 的隐式声明或默认复制赋值运算符被定义为已删除,以下任何一项为真:
T has a non-static data member that is const
T has a non-static data member of a reference type.
T has a non-static data member that cannot be copy-assigned (has deleted, inaccessible, or ambiguous copy assignment operator)
T has direct or virtual base class that cannot be copy-assigned (has deleted, inaccessible, or ambiguous move assignment operator)
T has a user-declared move constructor
T has a user-declared move assignment operator
所以这告诉我是什么导致了删除,而不是为什么?谁能解释一下:
T has a non-static data member of a reference type.
这是否足以在我的课堂上处理已删除的运算符:
T& T:operator=(T& t){};
如果我有一个作为引用类型的基类的成员。
我是否需要在我的operator= 中做任何事情,例如显式声明 return *this 或者编译器 (g++) 会为我处理这个吗?我必须对参考成员做任何特别的事情吗?很抱歉这个菜鸟问题,但我是 C++ 新手,刚开始使用托管语言(C# 和 Java)。
【问题讨论】:
-
如何复制一个隐含删除了
operator=的对象?memcpy()? -
例如:
memcpy(&destinationObject, &sourceObject, sizeof(sourceObject));
标签: c++