C ++使用智能指针

时间:2012-07-05 15:21:39

标签: c++ smart-pointers

在我的代码中,我有函数原型

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int position_x = 250, int position_y = 100, int position_z =0 );

其中ref_ptr是一个智能指针。

在我的main函数中,我定义了2个类型为ref_ptr和ref_ptr的智能指针,并将它们传递给我的函数AddBenchNode。

ref_ptr<Group> root = new Group();
ref_ptr<Node> benches = readNodeFile("Models/test.ive");
AddBenchNode(root, benches, true);

当呼叫执行时,没有任何反应。因为没有对根指针进行任何更改。我想知道的是,如果我正确地拨打这个电话吗?或者我是否必须重新定义我的功能以指出这些智能指针?

现在我尝试通过引用传递

void AddBenchNode(osg::ref_ptr<osg::Group>& root ,osg::ref_ptr<osg::Node>& benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int position_x = 250, int position_y = 100, int position_z =0 );

这导致了一些链接器错误。

错误2错误LNK2001:未解析的外部符号“void __cdecl AddBenchNode(class osg :: ref_ptr&amp;,class osg :: ref_ptr&amp;,bool,float,float,float,int,int,int)” (?AddBenchNode @@ YAXAAV?$ @ ref_ptr @ VGroup OSG @@@ OSG @@ AAV?$ @ ref_ptr @ v节点OSG @@@ 2 @ _NMMMHHH @ Z) 错误3错误LNK1120:1个未解析的外部

2 个答案:

答案 0 :(得分:1)

您按值传递(智能)指针。这意味着调用者和被调用者将共享同一个对象,但具有指针的单独副本。更改函数对对象的更改将对调用者可见。但是如果函数指向一个全新的对象,它不会影响调用者的指针,它仍指向旧对象。

如果要重新绑定调用者的指针,则需要通过指针或引用传递指针。

答案 1 :(得分:0)

看起来你正确使用智能指针,但很难说这个错误在哪里,因为我们不知道ref_ptr是什么或AddBenchNode是什么。

来自openscenegraphref_ptr