析构函数和映射

sca*_*bly 2 c++ destructor

class X;

class Y {
    public:
        ~Y();
    private:
        map<int,X*> m;
        vector<X*> v;
        X* px;
};
Run Code Online (Sandbox Code Playgroud)

我想析构函数class Y应该看起来像这样?

Y::~Y() {
    delete px; 
    for (vector<X*>::iterator it = v.begin(); it!=v.end(); it++) 
    delete *it;
    v.clear();
}
Run Code Online (Sandbox Code Playgroud)

但那怎么样Y::m

Pup*_*ppy 20

不,那是完全错误的.您已手动删除了资源,而不是使用资源管理类.这是一个非常糟糕的错误.如果你负责释放它们,你真的想要unique_ptr<X>或者shared_ptr<X>类似的类,而不是X*.

class Y {
    private:
        map<int,std::unique_ptr<X>> m;
        vector<std::unique_ptr<X>> v;
        std::unique_ptr<X> px;
};
Run Code Online (Sandbox Code Playgroud)

现在不需要自定义析构函数.


For*_*veR 5

至于矢量,但对于地图......

for (map<int, X*>::iterator it = m.begin(); it != m.end(); ++it)
   delete it->second;
Run Code Online (Sandbox Code Playgroud)