C ++智能指针

时间:2015-03-13 06:47:51

标签: c++ smart-pointers virtual-functions

考虑以下代码:

class Base{

};

class Derived : public Base{

};

int main(int argc, char **argv)
{
        std::unique_ptr<Base> b(new Derived());//1 // b is Base object but holds Derived pointer
        Base *b1 = new Derived();//Base obj points to Derived //3
        //std::unique_ptr<Base*> b(new Derived());//2
        return 0;
}

在第二个语句(// 2)中,我收到编译错误,但如果我们考虑语法(// 3),为什么我收到此错误,应该提供unique_ptr指针类型而不是类类型。

我是c ++中智能指针的新手。

先谢谢。

3 个答案:

答案 0 :(得分:4)

std::unique_ptr<T>是指向T 的智能指针;也就是说,它类似T*但更聪明。

因此,std::unique_ptr<Base*>是指向Base* 的智能指针;也就是说,它类似Base**但更聪明。

答案 1 :(得分:1)

std::unique_ptr(以及其他指针)采用它应该指向的对象的类型,而不是指针。

这样想:

  • 常规指针:T变为T*
  • 唯一指针:T变为unique_ptr<T>

答案 2 :(得分:1)

类模板unique_ptr<T>管理指向类型为T的对象的指针。

这是unique_ptr的定义方式:

template<
    class T,
    class Deleter = std::default_delete<T>
> class unique_ptr;

应该给出类型T。

因此,如果您需要指向Base的指针,则应该为其指定Base。如果你给它Base*,它将成为指向Base的指针。

在此处查看更多详情:http://en.cppreference.com/w/cpp/memory/unique_ptr 或者http://www.cplusplus.com/reference/memory/unique_ptr/unique_ptr/