use*_*904 -1 c++ design-patterns stl c++14
我想做这样的事情:
std::set<my_type*> s;
s.insert(new my_type(...));
...
s.erase(...);
Run Code Online (Sandbox Code Playgroud)
set的擦除将删除指针以避免内存泄漏.
这是可能的C++容器或适当的解决方案是子类化容器和编写我自己的擦除,或使用某种智能指针方案?
您set被声明存储my_type,但是您正在发送它my_type*,因此代码不一致.无论如何,如果您不需要堆分配,请不要使用它:
std::set<my_type> s;
// Emplace improves on s.insert(my_type(...)); by allowing construction in place
// to minimize move/copy work
s.emplace(...args for my_type...);
...
s.erase(...);
Run Code Online (Sandbox Code Playgroud)
如果没有堆分配,my_type则会调用析构函数,并且不需要delete自己的结构(或者更确切地说,set在内部进行管理).
如果你需要堆分配,使用智能指针,所以删除意味着释放(std::make_unique并使这个更清洁,让你完全避免使用new和delete):
std::set<std::unique_ptr<my_type>> s;
s.insert(std::make_unique<my_type>(...));
...
s.erase(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |