指针是出现错误的一大来源,如果在类中定义指针成员,在使用过程中必须十分小心;
如果在使用类的过程中采用动态分配内存的方式,其问题似乎变得愈加复杂。
先定义一个测试类:
class Cptr
{
public:
std::vector<int*> GetPtr()
{
std::vector<int*> vec;
BOOST_FOREACH(int i, IntVec)
{
BOOST_AUTO(pos, IntPtrMap.find(i));
if(pos!=IntPtrMap.end())
{
vec.push_back(pos->second);
}
}
return vec;
}
std::vector<int> Get()
{
std::vector<int> vec;
BOOST_FOREACH(int i, IntVec)
{
BOOST_AUTO(pos, IntPtrMap.find(i));
if(pos!=IntPtrMap.end())
{
vec.push_back(*pos->second);
}
}
return vec;
}
~Cptr()
{
std::cout<<__FUNCTION__<<std::endl;
if(pi)
{
std::cout<<"delete pi"<<std::endl;
delete pi;
pi = NULL;
}
int ct=0;
BOOST_FOREACH(int* ip, IntPtrVec)
{
std::cout<<"delete IntPtrVec "<<++ct<<std::endl;
delete ip;
}
ct=0;
std::map<int, int*>::iterator it = IntPtrMap.begin();
for(; it!=IntPtrMap.end(); ++it)
{
std::cout<<"delete IntPtrMap "<<++ct<<std::endl;
delete it->second;
}
}
std::vector<int> IntVec;
std::vector<int*> IntPtrVec;
std::map<int, int*> IntPtrMap;
int ival;
int* pi;
};
typedef boost::shared_ptr<Cptr> Cptr_ptr;
这个类没有定义构造函数&#