Tôi có đoạn mã sau:Mối quan hệ giữa Forward khai và destructor
#include <iostream>
using namespace std;
class CForward;
void func(CForward* frw) { delete frw; }
class CForward
{
public:
~CForward() { cout << "Forward" << endl; }
};
int main()
{
func(new CForward);
cin.get();
}
tôi chạy chương trình, và nó in gì cả.
Tại sao?
trong chính, tôi đã tạo new CFoward
và trong func
Tôi đã xóa nó và gọi đó là hàm hủy.
Dường như trình hủy không được gọi. Tại sao? Đó có phải là liên quan đến việc giải mã về phía trước không?
'g ++' thực sự cho bạn biết điều gì đang xảy ra khi bạn biên dịch mã này. – fuenfundachtzig
Ít nhất là tăng mức cảnh báo trên trình biên dịch của bạn. Điều này sẽ luôn luôn phát ra chẩn đoán "xóa con trỏ đến loại không đầy đủ". –
GCC khá hữu ích: 'cảnh báo: có thể phát hiện vấn đề trong yêu cầu xóa toán tử: [được bật theo mặc định] 'frw' có loại chưa hoàn thành [được bật theo mặc định] khai báo trước của 'class CForward' [enabled by default] note: not the destructor cũng như xóa toán tử lớp cụ thể sẽ được gọi, ngay cả khi chúng được khai báo khi lớp được định nghĩa'. – juanchopanza