溫馨提示×

c++ map刪除能觸發(fā)析構(gòu)嗎

c++
小樊
101
2024-06-25 16:44:32
欄目: 編程語言

在C++中,使用std::map來存儲元素時,當刪除元素時并不會觸發(fā)該元素的析構(gòu)函數(shù)。當元素從map中被刪除時,map會簡單地釋放其占用的內(nèi)存空間,并不會調(diào)用元素的析構(gòu)函數(shù)。如果想在刪除元素時觸發(fā)析構(gòu)函數(shù),可以手動調(diào)用元素的析構(gòu)函數(shù)。

以下是一個簡單的示例:

#include <iostream>
#include <map>

class MyClass {
public:
    MyClass(int val) : m_val(val) {
        std::cout << "Constructing MyClass with value " << m_val << std::endl;
    }

    ~MyClass() {
        std::cout << "Destructing MyClass with value " << m_val << std::endl;
    }

private:
    int m_val;
};

int main() {
    std::map<int, MyClass*> myMap;

    myMap[1] = new MyClass(1);

    delete myMap[1]; // 手動調(diào)用析構(gòu)函數(shù)

    myMap.erase(1); // 從map中刪除元素

    return 0;
}

在上面的示例中,當元素從map中刪除時,并不會觸發(fā)MyClass對象的析構(gòu)函數(shù)。為了觸發(fā)析構(gòu)函數(shù),我們手動調(diào)用了delete來釋放內(nèi)存。

0