tips

作者: 未来已来_1cab | 来源:发表于2019-01-26 14:55 被阅读0次

    两个常被使用的RAII classes分别是std::tr1::shared_ptr和std::auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它(被复制物)指向null。

    auto_ptr和tr1::shared_ptr两者都在其析构函数内做delete而不是delete []动作。那意味在动态分配而得的array身上使用auto_ptr或tr1::shared_ptr是个馊主意。尽管如此,那么做仍能通过编译:

    //馊主意!以下两个智能指针都使用了错误的delete形式。
    std::auto_ptr<std::string> aps(new std::string[10])
    std::tr1::shared_ptr<int> spi(new int[1024])
    

    你或许会惊讶地发现,并没有特别针对“C++动态分配数组”而设计的类似auto_ptr或tr1::shared_ptr那样的东西,甚至TR1中也没有。那是因为vector和string几乎总是可以取代动态分配而得的数组。如果你还是认为拥有针对数组而设计、类似auto_ptr和tr1::shared_ptr那样的classes较好,看看Boost吧(见条款55)。在那儿你会很高兴地发现boost::scoped_array和boost::shared_array类,它们都提供你要的行为。


    相关文章

      网友评论

          本文标题:tips

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