【发布时间】:2013-03-26 14:26:40
【问题描述】:
基本上,在其重载赋值运算符中调用类的构造函数是否可接受的编程实践/风格?如果没有,为什么不呢?
示例:
所以我有一个有 3 个数据成员的类,一个名为“value”的动态 int 数组,它包含一个大数字的数字,一个 int length,它指示数字中的位数,以及一个 int maxLength,它表示数字的最大长度(动态数组的大小)
这是我的带参数 int 的构造函数:
bigInt::bigInt(const int &rhs){
//turn num_ into a string 'num'
stringstream ss;
ss << num_;
string num = ss.str();
length = strlen(num.c_str());
maxLength = (length - (length%16)) + 16;
value = new int[maxLength];
for(int i=1; i<=length; i++){
value[i-1] = num.at(length-i) - '0';
}
}
这是我的重载赋值运算符,其中右侧是常规 int 此方法调用构造函数:
bigInt bigInt::operator=(const int &rhs){
*this = bigInt(rhs);
return *this;
}
编辑:我想我应该用不同的措辞。我的意思不是 COPY 构造函数,而是具有非类实例参数的常规构造函数,以及 rhs 与 lys 类型不同的重载赋值运算符
【问题讨论】:
-
你会怎么做以及它会有什么帮助?
-
举个例子会很有用。
-
您的示例将导致无限递归。
*this = bigInt(rhs); -
@AaronMampáro - 试试吧 :)
-
@AaronMampáro 另请注意,从赋值运算符返回按值是一个错误,会降低性能。
标签: c++ operator-overloading copy-constructor