12

这是我创建的一个类:

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

在构建此类的每个对象时,没有(显式)动态分配,只有“原始”类型分配。(除了字符串类如何处理内存之外,我没有明确的动态分配)。

当我尝试这个时:

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

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

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

非常感谢!加尔

4

1 回答 1

23

因为你有const会员。它们不能被赋值,所以编译器不能提供赋值运算符。

于 2013-06-15T14:43:33.167 回答