01/10/2018, 17:24

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?

Tao Không Ngu. viết 19:26 ngày 01/10/2018

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 ?

Le Ly Vinh viết 19:33 ngày 01/10/2018

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

Tao Không Ngu. viết 19:37 ngày 01/10/2018

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.

Trần Hoàn viết 19:26 ngày 01/10/2018

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ỷ.

rogp10 viết 19:30 ngày 01/10/2018

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

Bài liên quan
0