温馨提示×

c++ map删除能触发析构吗

c++
小樊
83
2024-06-25 16:44:32
栏目: 编程语言

在C++中,使用std::map来存储元素时,当删除元素时并不会触发该元素的析构函数。当元素从map中被删除时,map会简单地释放其占用的内存空间,并不会调用元素的析构函数。如果想在删除元素时触发析构函数,可以手动调用元素的析构函数。

以下是一个简单的示例:

#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]; // 手动调用析构函数

    myMap.erase(1); // 从map中删除元素

    return 0;
}

在上面的示例中,当元素从map中删除时,并不会触发MyClass对象的析构函数。为了触发析构函数,我们手动调用了delete来释放内存。

0