在c ++中将指针解引用到引用中

时间:2012-03-17 20:20:34

标签: c++ smart-pointers

在以下代码段中,是否有需要考虑的警告?

void do_stuff()
{
    std::unique_ptr<my_type> my(new my());

    my_type& mine = *my;

    //use mine 
}

通过取消引用隐式指针来“突显”我的价值给了我一种奇怪的感觉,因为它感觉它会创建一个临时的(但我很确定不是这样)

3 个答案:

答案 0 :(得分:3)

在保持对象的引用(或指针)时,代码可以正常注意:您必须确保该对象比指针或引用的使用寿命更长。

在这种特殊情况下,请确保通过调用unique_ptrreset()来删除delete my.release();中的对象,我认为这是唯一的生命周期该引用可能比对象本身的寿命更长。

旁注:我假设你有充分的理由为该对象使用动态分配。如果您不确定,请考虑不首先使用指针/ new。

我也假设 performance 没有引用,如果是,你可能想要通过引用考虑访问,否则智能指针将被转换为完全相同的二进制文件。

答案 1 :(得分:0)

除了没有多大意义(至少在代码片段中)代码没有问题,如果my的构造和引用的赋值之间确实没有任何内容。

答案 2 :(得分:0)

确保指针超过(使用)引用。

一种简单的方法是使用 const

void doStuff()
{
    auto const p    = std::unique_ptr<MyType>( new MyType );
    MyType&    m    = *p;

    // use m
}

当然,如果没有任何特殊原因需要动态分配(例如大小或特殊分配器),那么只需对MyType对象使用自动分配,即声​​明它直接作为局部变量而不使用单词static