不要在容器上放auto_ptr对象
实际上类似下面的代码,是无法编译通过的. 编译器会提示你 "错误 C2558 class“std::auto_ptr<char>”: 没有可用的复制构造函数或复制构造函数声明为“explicit”"
vector<std::auto_ptr<char>> vecCharSrc;
for (int i = 1; i <= 10; i++)
{
std::auto_ptr<char> pSrc(new char[i]);
vecCharSrc.push_back(pSrc);
}
编译器已经禁用了,这里只做一个最简单的说明
如果一个vector容器中存放的是std::auto_ptr对象,
如果在一个函数中取出容器中的一个对象赋值给一个临时变量用一下. 赋值过程中容器中的std::auto_ptr对象指向的资源就已经被悄悄的置为NULL.
等下一个函数,用相同的方法,取出该容器的这个对象的时候,实际上已经不是想要的对象了.
网友评论