下面的代碼失敗,GCC 4.8.0(MinGW的-W64)與-O2 -std = C++ 11個-frtti -fexceptions -mthreadsC++刪除移動賦值運算符編譯問題
#include <string>
class Param
{
public:
Param() : data(new std::string) { }
Param(const std::string & other) : data(new std::string(other)) { }
Param(const Param & other) : data(new std::string(*other.data)) { }
Param & operator=(const Param & other) {
*data = *other.data; return *this;
}
~Param() {
delete data;
}
Param & operator=(Param &&) = delete;
private:
std::string * data;
};
int main()
{
Param param;
param = Param("hop");
return 0;
}
隨着錯誤:錯誤:使用刪除功能「帕拉姆&帕拉姆::運算符=(帕拉姆& &)」 就行了:
param = Param("hop");
,編制好如果我刪除了移動作業中刪除線。
不應該有默認的舉動賦值運算符,因爲有用戶定義的複製構造函數,用戶定義的拷貝賦值和析構函數,所以刪除它不應該影響編譯,爲什麼會失敗? 爲什麼分配只是不使用複製分配?
我不會對你的問題發表評論,只是說你使用你的構造函數是錯誤的。你應該使用構造函數的初始化列表,如下所示:'Param():data(new std :: string){}'因爲否則你做了一些奇怪的初始化然後賦值。 – noobProgrammer
OK,我做了一些改變的代碼來解決一些錯誤和回答您的意見,但這並不改變結果 – galinette
'= delete'意味着「調用這個函數是一個錯誤」,從重載集合不是「刪除此功能「。 – Casey