在c ++中使用已删除的函数

ber*_*erg 11 c++ eclipse

这是我创建的课程:

class A{  
private:  
    // some private data members:  
    // 2 const integers  
    // 2 integers  
    // 2 const strings  
public:  
    // C'tor  
    // D'tor  
void f(const A&);  
}
Run Code Online (Sandbox Code Playgroud)

在构造该类的每个对象时,没有(显式)动态分配,只有"原始"类型分配.(没有明确的动态分配,我的意思是除了字符串类处理内存之外).

当我尝试这个:

void f(const A& item){  
    // do some thing  
*this = item;  
    // do other stuff  
}
Run Code Online (Sandbox Code Playgroud)

我得到以下错误:"使用已删除的函数'A&A :: operator =(const A&)'"

现在我知道编译器应该为我提供一个默认的赋值运算符,我的问题是:为什么编译器将它的默认赋值运算符称为删除函数?如何在不手动分配所有数据成员函数的情况下解决此问题?

非常感谢!加尔

Oli*_*rth 22

因为你有const会员.它们无法分配,因此编译器无法提供赋值运算符.

  • **12.8/23 [class.copy]***如果X具有以下内容,则类X的默认复制/移动赋值运算符被定义为已删除:[...] const非类类型的非静态数据成员(或其他案例见同一段. (4认同)