Đây là code: http://codepad.org/pgOIaMIL
#include <iostream>
using namespace std;
class ClassA
{
int *a;
public:
ClassA()
{
a = new int[1];
a[0] = 1;
}
ClassA abc()
{
return *this;
}
~ClassA()
{
if (a != NULL)
{
a = NULL;
delete [] a;
}
cout << "delete";
}
};
void main()
{
ClassA a;
a.abc();
cout << "123";
}
Kết quả xuất ra là:
delete123delete
Trong lý thuyết nói hàm destructor chỉ chạy 1 lần cho mỗi đối tượng khi không dùng nữa. Nhưng theo code này thì hàm destructor được gọi 2 lần. 1 lần là sau lệnh return *this, và 1 lần là trước khi kết thúc chương trình. Mình muốn hiểu rõ hơn về về vấn đề này.
Mong được giải đáp.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?