考虑以下代码:
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 ++中智能指针的新手。
先谢谢。
答案 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/