[英]Problematic code??? Is there a problem with my destructor?
我的代碼可以編譯並運行,但是有人告訴我這很成問題。 我不明白我該怎么做。
另外,聲明“ char _arrName [2];”是否不正確? 並進行賦值“ _arrName [2] ='\\ 0';” ? 難道不是“越界”錯誤嗎?
#include <iostream>
using namespace std;
class Base {
protected:
char* _name;
public:
virtual ~Base() { cout << "Base dtor of " << _name << endl; };
};
class D1: public Base {
char _arrName[2];
public:
D1() {
_name= _arrName;
_arrName[0]= 'D';
_arrName[1]= '1';
_arrName[2]= '\0';
}
virtual ~D1() { cout << "D1 dtor" << endl; }
};
int main () {
Base* arr[2];
arr[0]= new D1();
delete arr[0];
}
是的,這條線上肯定有錯誤。
_arrName[2]= '\0';
_arrName
是兩個char
的數組,因此您只能使用_arrName[0]
和_arrName[1]
這兩個值。 _arrName[2]
超出范圍。
這條線也有問題。
virtual ~Base() { cout << "Base dtor of " << _name << endl; };
因為派生類已將_name
指向派生類的數組成員,所以在調用_name
~Base()
,此數組將被銷毀,並且_name
將不再指向有效數組。
基類中有可能出錯。 _name
從未被初始化,因此它依賴於派生類對其進行初始化。 盡管實際上可能會或可能不會引起實際問題,但這並不是理想的設計。
您的代碼沒有錯。 可能是因為您沒有縮進代碼,這使它的閱讀難度提高了100倍。
但是,我建議您使用std :: string而不是普通的C樣式字符串。 它使您的工作更加輕松。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.