博客
关于我
OSG学习:OSG中的智能指针
阅读量:800 次
发布时间:2023-02-26

本文共 889 字,大约阅读时间需要 2 分钟。

在OSG中,智能指针用于管理堆内存。智能指针通过增加和减少引用计数来确保内存的正确释放。OSG中的引用计数存储在osg::Referenced类中,该类提供ref()unref()方法来操作引用计数。所有继承自Referenced的类都包含引用计数。

正确使用智能指针的关键在于理解其管理内存的方式。智能指针本身位于栈上,其管理的内存位于堆中。只需将内存块交给智能指针管理,无需手动释放即可。

以下代码示例存在问题:在removeChild操作后,cow内存已被释放,尝试再次使用该内存会导致访问错误。正确做法是通过智能指针进行管理,如下所示:

#include 
#include
#include
#include
int main(int argc, char **argv) { osgViewer::Viewer viewer; osg::Group* root = new osg::Group; osg::ref_ptr
cow = createCowNode(); root->addChild(cow); viewer.setSceneData(cow); return viewer.run();}

函数返回局部对象指针时,不应直接返回内存管理。正确做法是将内存交给智能指针处理:

int main(int argc, char **argv) {    osgViewer::Viewer viewer;    osg::ref_ptr
cow = createCowNode(); root->addChild(cow); viewer.setSceneData(cow); return viewer.run();}

综上所述,创建的内存块应交给智能指针管理。智能指针的作用域和生命周期与传统指针不同,需谨慎处理。

转载地址:http://nkvfk.baihongyu.com/

你可能感兴趣的文章
ORACLE多表关联UPDATE 语句
查看>>
Oracle多表查询与数据更新
查看>>
oracle如何修改单个用户密码永不过期
查看>>
UML- 类图
查看>>
oracle字符集
查看>>
oracle存储参数(storage子句)含义及设置技巧
查看>>
Oracle学习
查看>>
ui 图片素材网站
查看>>
Oracle学习总结(10)——45 个非常有用的 Oracle 查询语句
查看>>
Oracle学习总结(2)——Oracle数据库设计总结(三大范式)
查看>>
Oracle学习总结(3)——Navicat客户端连接Oracle数据库常见问题汇总
查看>>
Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全
查看>>
Oracle学习总结(6)—— SQL注入技术
查看>>
Oracle学习总结(7)—— 常用的数据库索引优化语句总结
查看>>
Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则
查看>>
Oracle学习总结(9)—— Oracle 常用的基本操作
查看>>
oracle学习笔记《二》
查看>>
oracle学习笔记(4)
查看>>
Oracle学习第二天---Profile的使用
查看>>
Oracle学习第五课
查看>>