1. 遇到问题
今天用OSG写了一个类,结构如下:
// a.h
class A:...
{
...
// 给参数geode赋值
void createGeode(osg::ref_ptr<osg::Geode> geode);
void fun();
osg::ref_ptr<osg::Geode> _geode;
}
// a.cpp
void A::createGeode(osg::ref_ptr<osg::Geode> geode)
{
geode = new osg::Geode;
...
}
void A::fun()
{
...
// 调用createGeode()函数给类成员_geode赋值
createGeode(_geode);
}
结果运行不正确,调试的时候fun()
中调用createGeode()
给_geode
赋值后,_geode
居然是NULL。
2. 错误原因
后来明白过来,这个问题原来是就是指针作参数在函数内分配内存一样的问题。不过这里用的是OSG提供的智能指针罢了。
3. 解决方法
用指针的指针作参数即可。代码改成如下:
// a.h
class A:...
{
...
// 给参数geode赋值
void createGeode(osg::ref_ptr<osg::Geode>* geode);
void fun();
osg::ref_ptr<osg::Geode> _geode;
}
// a.cpp
void A::createGeode(osg::ref_ptr<osg::Geode>* geode)
{
*geode = new osg::Geode;
...
}
void A::fun()
{
...
// 调用createGeode()函数给类成员_geode赋值
createGeode(&_geode);
}