Gọi destructor 2 lần của cùng một đối tượng

Mình có đoạn code:

#include <iostream>
using namespace std;

class Test
{
public:
    ~Test()
    {
        cout<<"Deleting...";
    }
};

void print()
{
    Test a;
    a.~Test();
    return;
}

int main()
{
    print();
}

Nó in ra “Deleting…Deleting…”. Cho mình hỏi khi mình gọi destructor lần I, nó có thực sự hủy a không?

Hi Le Ly Vinh.

  1. Hàm hủy được tự gọi khi đối tượng bị giải phóng.
  2. Hàm hủy là 1 hàm và bạn gọi nó như một hàm bình thường.

P/S Bạn hiểu thế nào là giải phóng một đối tượng ?

Nghĩa là nó không sẽ không làm gì “a” ạ?

Hi Le Ly Vinh.
Nó vẫn là một hàm bình thường bạn gọi nó là gì thì nó làm nây thôi.

1 Like

Hàm huỷ được gọi khi:

  1. Bạn gọi
  2. Đối tượng bị huỷ.

Khi bạn gọi destructor, nó không bị huỷ.

Bản thân đối tượng ko bị hủy khi gọi hàm hủy. Hàm hủy này hay dùng để free những thứ mà đối tượng đang nắm giữ (và trả lại trạng thái ban đầu, nếu có). Vấn đề xảy ra khi đối tượng đang xài chung tài nguyên đang giữ và bị free kiểu như vậy, nên xài chung thì phải viết khác.

p/s: vừa sửa lại tiêu đề vì delete hai lần là toạch :slight_smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?