01/10/2018, 01:02

Khi return một biến trong hàm thì đối tượng bị gọi destructor?

Em có lớp với template như thế này, ở operator + khi mình return temp thí hàm lại gọi destructor. Cho em hỏi vì sao như vậy ạ?
http://codepad.org/amTxcXnn

viết 03:04 ngày 01/10/2018

code hàm main() đâu @_@

code chưa có copy ctor @_@

nếu viết là:
MyString<> s = a + b;
thì biến tạm do a+b tạo ra bị xóa, Tuy nhiên nếu có copy ctor thì hên xui trình dịch có thể gán thẳng biến tạm này vào s luôn, ko bị xóa.

hoặc ko gán gì mà ghi
cout << a+b;
tương tự a+b cũng là biến tạm, cout xong thì biến tạm thời đó được xóa

hoặc s đã được khởi tạo trước, rồi gọi
s = a + b;
thì đầu tiên tạo ra biến tạm a+b, sau đó gọi operator= gán a+b cho s, rồi cuối cùng là xóa a+b.

operator= chưa có kiểm tra self-assignment, vd s = s; thì cái code cho operator= hiện tại có thể gây lỗi: delete[] this->chuoi chính là delete[] ms.chuoi (vì vế trái y hệt như vế phải trong phép gán s = s). Vì vậy dữ liệu trong ms.chuoi sau đó có thể bị chép đè ký tự rác…

template gì mà lúc viết T, lúc viết char, chỉ có ctor cho char, chả biết đâu mà lần @_@

Anh Khoa Nguyen viết 03:08 ngày 01/10/2018

Thank bro!!!
Do tối em viết code rồi debug tùm lum nên xóa thêm đủ thứ, giờ thì làm được rồi. Vậy là phải có copy constructor để nó copy vào biến sau đó mới return được. Thank bro nhìu!!!

Bài liên quan
0