乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 105|回复: 6

智能指针

[复制链接]

5

主题

65

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
93
发表于 2005-12-10 22:18:13 | 显示全部楼层 |阅读模式
我被要求解释什么是智能指针,以及为什么你可能想在你的ObjectARX程序中使用它们。开始了。
要理解为什么需要智能指针这样的东西,首先了解C++中关于内存管理的一些基本事实很重要。当您在C++中为变量分配内存时,您可以从堆栈或堆中获取该内存。放置在堆栈上的变量有时称为自动变量,因为当它们超出范围时(我肯定希望每个人都知道这意味着什么),它们使用的内存会自动返回堆栈。放置在堆中的变量被称为动态变量,因为它们使用的内存的大小和位置会在它们的生命周期内发生变化。必须明确告诉动态分配的变量释放分配给它们的内存。动态分配的变量将始终是指针。如果您不知道指针是什么,那完全是另一个讨论的主题。
考虑这段代码:
  1. void test() {
  2.   int x = 0; // automatic variable
  3.   int* pY = new int(1); // dynamic variable
  4.   delete pY; // pY deallocated here
  5. } // all variables in the preceeding block go out of scope here.

x的内存在函数的结束括号处获得释放。但是,如果我忽略了释放pY的内存(通过删除),我就会有内存泄漏,并且由于pY超出了范围,我将无法纠正我的错误。
这就是智能指针的用武之地。智能指针将动态分配的变量包装在一个类中,该类自动管理内存的分配和释放。这是一个示例:
这是您在应用程序代码中使用它的方式:
[2]
清除为泥?
ObjectARX API开箱即用地提供了几种不同类型的智能指针。ObjectARX中最常用的智能指针可能是AcDbObjectPointer模板类。智能指针类通常是模板类,原因一旦您开始亲自探索它们就会变得显而易见。还有用于符号表、符号表记录和可能其他一些我不知道的东西的智能指针类。
使用与否由您决定,但我认为您会发现它们极大地减少了代码中内存管理错误的机会,并且它们经常使您的代码更加紧凑和简洁。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2005-12-11 13:54:27 | 显示全部楼层
完美。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2005-12-11 15:37:42 | 显示全部楼层
恰克,好样的!
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2005-12-12 06:36:48 | 显示全部楼层
谢谢,查克。
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2005-12-12 07:39:57 | 显示全部楼层
非常好,非常清楚,谢谢查克。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2005-12-13 00:06:54 | 显示全部楼层
如果有一天你有机会并且想公开一些关于MFC对话框/使用ARX SDK或了解dockbar控件的信息......
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2005-12-13 14:56:24 | 显示全部楼层

事实是我对MFC知之甚少。我只使用最基本的控件进行了几次非常简单的对话框。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 14:48 , Processed in 0.155826 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表