【发布时间】:2013-02-20 11:03:00
【问题描述】:
我已经定义了一个类myClass,它的一个数据成员是
std::map<int,data*> dataMap
数据定义为
struct data
{
int d1;
int d2;
std::string d3;
}
向dataMap插入数据如下:dataMap[key] = new data;
以下分配会导致问题:
myClass a1,a2;
//init a1;
a2 = a1;
我想将 auto_ptr 用于数据而不是数据*。我该怎么做?-
因为在a2被破坏后破坏“a1数据的坏指针”存在问题。std::map<int,std::auto_ptr<data> >编译有问题
Upd 正如你所建议的,我使用 std::shared_ptr 但它仍然会导致问题:
在VS10
error C2440: 'delete' : cannot convert from 'std::tr1::shared_ptr<_Ty>' to 'void *'
1> with
1> [
1> _Ty=data
1> ]
您能否编写示例代码来指出正确使用 shared_ptr 的方法
【问题讨论】:
-
你使用的是 C++03 还是 C++11?
-
不要使用
auto_ptr,如果你可以访问c++11,请使用std::unique_ptr或std::shared_ptr,否则回退到使用boost::shared_ptr。
标签: c++ map smart-pointers assign auto-ptr