Kon*_*ele 2 c++ stdmap unique-ptr c++17
是否有透明的std::unique_ptr容器使用方式?
#include <iostream>
#include <memory>
#include <map>
struct method {
virtual ~method() { std::cout << "f\n"; };
};
typedef std::unique_ptr<method> MPTR;
std::map<int, MPTR> tbl;
void insert(int id, method *m) {
tbl.insert({id,std::unique_ptr<method>(m)});
};
void set(int id, method *m) {
tbl[id] = std::unique_ptr<method>(m);
};
int main(int argc, char **argv) {
insert(1,new method());
set(1,new method());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想使用tbl.insert({id,m});和tbl[id] = m;等,而不必为每次访问包装/解包.
std::map.Dre*_*ins 10
通常,我们不想隐式创建,std::unique_ptr因为这可能是危险的.
在这个例子中,我建议从一个unique_ptr而不是裸露开始new.这可确保跟踪整个生命周期.
#include <memory>
int main(int argc, char **argv) {
auto m = std::make_unique<method>();
insert(1, std::move(m));
}
Run Code Online (Sandbox Code Playgroud)
内insert还可以使用std::move将所有权转让给集合.
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |