创建一个包含2个参数的auto_ptr

时间:2014-07-23 15:27:53

标签: c++ compilation auto-ptr

我运行此代码时出现编译错误:

std::auto_ptr<MyDisplay> m_display =
    std::auto_ptr<MyDisplay>(new MyDisplay(this, m_displayController));

错误就是这个:

error C2664: 'MyDisplay::MyDisplay(DemoWindow *,DisplayController*)':
   cannot convert parameter 2 from 'std::auto_ptr<_Ty>' to 'DisplayController*'

但是当我只传递一个参数时,代码是正确的:

std::auto_ptr<DisplayController> m_displayController =
    std::auto_ptr<DisplayController>(US_NEW(DisplayController, this));

使用2个参数在auto_ptr中创建指针的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

在错误消息中,m_displayController似乎是std::auto_ptr<DisplayController>,而MyDisplay构造函数需要DisplayController*

尝试:

std::auto_ptr<MyDisplay> m_display =
    std::auto_ptr<MyDisplay>(new MyDisplay(this, m_displayController.get()));

或者更好的是,使构造函数与std::auto_ptr<DisplayController>兼容。

顺便说一句:这里std::auto_ptr的选择可能不是最好的。您可能希望read up了解不同类型的智能指针,以及它们具有的不同行为。

答案 1 :(得分:0)

我想澄清你创建自动指针的想法,我希望这会有所帮助 您的目标是创建一个包含DisplayController *的auto_ptr。你可以写

m_displayController = std::auto_ptr<DisplayController>( new DisplayController(x, y) );

或者有一个返回指针的函数,如下所示:

m_displayController = std::auto_ptr<DisplayController>( US_NEW(x,y) );

您可以查看一个简单示例here.