在类赋值操作符函数中,为什么必须返回*this ?
C++ : In Class Assignment operator function why do we have to return *this
我用c++写了一个类,并定义了赋值运算符函数:Cplusplus.com推荐以下语法:
check operator= (const check& obj){*cstr = *(obj.cstr); return *this;}
另一个语法是:
void operator= (const check& obj){*cstr = *(obj.cstr);} # Not returning *this
你会推荐使用第一种方法还是第二种方法?
下面是我的类:
class check {
private:
string * cstr;
public:
int a;
check (string str) { cstr = new string(str);}
check (const check& obj) {cstr = obj.cstr;}
~check() {cout<<"DES"<<endl; delete cstr; }
check operator= (const check& obj){*cstr = *(obj.cstr); return *this;}
void display () { cout<<*cstr<<endl;}
};
int main () {
check da {"one"};
check pa {"two"};
pa = da;
have (pa);
return 0;
}
赋值操作符通常的写法实际上是
check &operator= (const check& obj){*cstr = *(obj.cstr); return *this;}
。,返回对自身的引用。这与内置类型的赋值语义相匹配。如果不使用返回值,按值返回check
可能会导致不必要的复制。返回void
意味着不能写入check1 = check2 = check3;
。
顺便说一下,check (const check& obj) {cstr = obj.cstr;}
可能是错误的。您希望复制构造函数进行深度复制,而不仅仅是复制指针。此外,我认为没有理由需要将指针用作类成员。如果您只存储一个普通的std::string
,您可以简单地使用编译器生成的复制构造函数和复制赋值操作符。
相关文章:
- 在 C++ 中返回新的构造函数(*this)工厂
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- 返回 *this 和 this - c++ 之间的区别
- 返回C++"This"对象的函数
- 返回带或不带 *this 的变量的确切方式不同 |这不是关于*此指针|正确性
- 返回 *this,尝试级联,并且不返回引用
- 从 const 成员函数返回 'this' 作为非常量
- 为什么有些类方法返回"*this"(self的对象引用)?
- C++对返回*this的成员函数的重复调用顺序
- 如何在php扩展中返回$this
- 为什么当这仍在传递时需要返回 *this
- 在类赋值操作符函数中,为什么必须返回*this ?
- 宏返回'this'指针,或 NULL (当指针不可用时)
- 继承返回*this的成员函数
- 返回this的右值引用的正确方法
- 在C++返回"this"?
- 在返回*this后调用析构函数
- 我可以有一个返回*this并处理非常量对象的const成员函数吗
- 如何在托管C++中正确实现类返回"this"的方法?