我被要求解释什么是智能指针,以及为什么你可能想在你的ObjectARX程序中使用它们。开始了。
要理解为什么需要智能指针这样的东西,首先了解C++中关于内存管理的一些基本事实很重要。当您在C++中为变量分配内存时,您可以从堆栈或堆中获取该内存。放置在堆栈上的变量有时称为自动变量,因为当它们超出范围时(我肯定希望每个人都知道这意味着什么),它们使用的内存会自动返回堆栈。放置在堆中的变量被称为动态变量,因为它们使用的内存的大小和位置会在它们的生命周期内发生变化。必须明确告诉动态分配的变量释放分配给它们的内存。动态分配的变量将始终是指针。如果您不知道指针是什么,那完全是另一个讨论的主题。
考虑这段代码:
- void test() {
- int x = 0; // automatic variable
- int* pY = new int(1); // dynamic variable
- delete pY; // pY deallocated here
- } // all variables in the preceeding block go out of scope here.
x的内存在函数的结束括号处获得释放。但是,如果我忽略了释放pY的内存(通过删除),我就会有内存泄漏,并且由于pY超出了范围,我将无法纠正我的错误。
这就是智能指针的用武之地。智能指针将动态分配的变量包装在一个类中,该类自动管理内存的分配和释放。这是一个示例:
这是您在应用程序代码中使用它的方式:
[2]
清除为泥?
ObjectARX API开箱即用地提供了几种不同类型的智能指针。ObjectARX中最常用的智能指针可能是AcDbObjectPointer模板类。智能指针类通常是模板类,原因一旦您开始亲自探索它们就会变得显而易见。还有用于符号表、符号表记录和可能其他一些我不知道的东西的智能指针类。
使用与否由您决定,但我认为您会发现它们极大地减少了代码中内存管理错误的机会,并且它们经常使您的代码更加紧凑和简洁。
本帖以下内容被隐藏保护;需要你回复后,才能看到! 游客,如果您要查看本帖隐藏内容请 回复 |