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 (map<int, X*>::iterator it = m.begin(); it != m.end(); ++it)
delete it->second;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8947 次 |
| 最近记录: |