簡體   English   中英

這個簡單的代碼會導致內存泄漏嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM