C++ 使用标准c+转换为非标量类型+;11智能指针

C++ 使用标准c+转换为非标量类型+;11智能指针,c++,c++11,unique-ptr,openscenegraph,C++,C++11,Unique Ptr,Openscenegraph,我目前正在玩openscenegraph,它使用自己的智能指针。但是我想使用std c++11智能指针 现在,这是工作示例代码 osg::ref_ptr<osg::Uniform> SineUniform = new osg::Uniform( "Sine", 0.0f ); osg::ref_ptr sineunium=新的osg::Uniform(“正弦”,0.0f); 但是当我做这样的事情时 std::unique_ptr<osg::Uniform> Si

我目前正在玩openscenegraph,它使用自己的智能指针。但是我想使用std c++11智能指针

现在,这是工作示例代码

osg::ref_ptr<osg::Uniform> SineUniform   =  new osg::Uniform( "Sine", 0.0f );
osg::ref_ptr sineunium=新的osg::Uniform(“正弦”,0.0f);
但是当我做这样的事情时

std::unique_ptr<osg::Uniform> SineUniform   =  new osg::Uniform( "Sine", 0.0f );
std::unique\u ptr sineiform=新osg::Uniform(“正弦”,0.0f);
然后我得到以下错误消息

错误:从“osg::Uniform*”转换为非标量类型 已请求“std::unique_ptr”

知道发生了什么吗?对智能指针有什么要求吗?

您应该这样做:

std::unique_ptr<osg::Uniform> SineUniform(new osg::Uniform( "Sine", 0.0f ));
std::unique_ptr sineunium(新osg::Uniform(“Sine”,0.0f));

另外,注意不要混合使用不同类型的智能指针。OpenSceneGraph可能会对其对象的管理方式做出假设,并且可能需要使用
osg::ref_ptr
。您应该仔细阅读文档以了解这一点-不幸的是,我无能为力。

好的,谢谢您说得对,我可能必须使用osg智能指针。@MaikKlein:很高兴它有所帮助-至少部分如此。