美文网首页
Effective STL 第8条

Effective STL 第8条

作者: 懒生活 | 来源:发表于2022-08-22 23:27 被阅读0次

    不要在容器上放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.
    等下一个函数,用相同的方法,取出该容器的这个对象的时候,实际上已经不是想要的对象了.

    相关文章

      网友评论

          本文标题:Effective STL 第8条

          本文链接:https://www.haomeiwen.com/subject/xzswgrtx.html