[英]Would this simple code cause a memory leak?
假設您有以下C ++代碼段:
class base {};
class derived : public base {
public:
std::string str;
};
int main() {
base *b = new derived();
delete b;
}
這會泄漏,對嗎? 永遠不會調用derived
的字符串的析構函數,因為未將base
的析構函數標記為虛擬的。 還是我誤會了什么?
您正在delete
通過類型base*
的指針派生一個,並且base
沒有virtual
析構函數。
那就是未定義行為(UB) ,這意味着可能發生任何事情。
如果std::string
分配了任何內存而導致內存泄漏(認為短字符串優化,這意味着不需要為空字符串分配額外的內存),這是一種可能的(而且很可能是)表現UB,這並不是最糟糕的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.