相关疑难解决方法(0)

何时使用虚拟析构函数?

我对大多数OO理论有了深刻的理解,但让我困惑的一件事是虚拟析构函数.

我认为无论什么以及链中的每个对象,析构函数总是会被调用.

你什么时候打算让它们成为虚拟的?为什么?

c++ polymorphism shared-ptr virtual-destructor

1420
推荐指数
13
解决办法
66万
查看次数

unique_ptr到派生类,作为将unique_ptr带到基类的函数的参数

我试图unique_ptr在一个unique_ptr带有基类的函数中使用一个派生类.就像是:

class Base {};

class Derived : public Base {};

void f(unique_ptr<Base> const &base) {}

…

unique_ptr<Derived> derived = unique_ptr<Derived>(new Derived);
f(derived);
Run Code Online (Sandbox Code Playgroud)

如果我正确理解了这个答案,那么这段代码应该可行,但它会导致以下编译错误:

错误C2664:'f':无法将参数1从'std :: unique_ptr <_Ty>'转换为'const std :: unique_ptr <_Ty>&'

IntelliSense:没有合适的用户定义转换,从"std :: unique_ptr <Derived,std :: default_delete <Derived >>"到"const std :: unique_ptr <Base,std :: default_delete <Base >>"存在

如果我改变f采取unique_ptr<Derived> const &derived,它工作正常,但这不是我想要的.

难道我做错了什么?我该怎么做才能解决这个问题?

我正在使用Visual Studio 2012.

c++ unique-ptr c++11 visual-studio-2012

57
推荐指数
3
解决办法
5万
查看次数