读书人

为什么string的operator=操作只能返回

发布时间: 2012-04-05 12:42:40 作者: rapoo

为什么string的operator=操作只能返回string&,而不是string ?
自己写了一个简单的string类,但是不知道为什么string的operator=操作只能返回string&,而不能是string,否则会有运行错误,难道是返回string时候返回值的生命周期已经到了?但是如果是这样的话,难道引用会延长生命周期?

[解决办法]
贴下你的代码
[解决办法]
ckt1120(坏人)说得很有道理。

在第二个operator=时将返回一个临时对象,该临时对象将调用MyString的拷贝构造函数从this产生。由于你没有定义类的拷贝构造函数,系统将会按默认的方式使用自动生成的拷贝构造函数(即按bit拷贝,很可能是memcpy)。临时对象的data将和this-> data指向同一个地址的变量。在析构函数中,你delete了data,所以在临时对象超出它的作用域范围时,它调用delete data释放了资源,并且置为NULL,这个时候this的data也被释放了,所以运行就报错了。

引用并没有延长作用周期,只是引用的时候不产生临时对象,没有析构函数来delete data,所以就是正常的了。

一般来说,定义了拷贝构造函数、赋值函数、析构函数中的一个,意味着其它两个也很可能被同时定义。

呵呵,还是要多看看书,多想想啊。

读书人网 >C++

热点推荐