WEB开发网
开发学院软件开发VC Visual C++中删除托管对象、包装库及其他 阅读

Visual C++中删除托管对象、包装库及其他

 2008-11-12 19:26:24 来源:WEB开发网   
核心提示: 以下是引用片段:delete pmc;ldloc.0 ; _pmc$call ..1ManagedClass@@$$FQ$AAM@XZ那些奇怪的神秘符号就是析构函数 (__dtor) 的托管名称,经验丰富的 C++ 编程人员也可能会疑惑不解,Visual C++中删除托管对象、包装库及其他

以下是引用片段:
  delete pmc;
  ldloc.0 ; _pmc$
  call ..1ManagedClass@@$$FQ$AAM@XZ

那些奇怪的神秘符号就是析构函数 (__dtor) 的托管名称。

经验丰富的 C++ 编程人员也可能会疑惑不解,想知道如果调用 delete 不释放对象,那调用它有什么用呢?这个问题提得好。调用 delete 的唯一目的是回收类使用的任何非托管资源。例如,如果您的对象打开文件或创建一个数据库连接,则可以编写一个析构函数,当对象使用完毕时,可以用这个析构函数关闭它的资源,然后使用 delete 来调用它。释放托管类中的资源的更好方式是通过实现 Dispose 模式、IDisposable 和 auto_dispose 模式(如果您采用托管 C++ 编写)来调用它。有关更多信息,请参考 Tomas Restrepo 在 2002 年 2 月的 MSDN?Magazine 中撰写的“Tips and Tricks to Bolster Your Managed C++ Code in Visual Studio .NET”。

如果您实现 dispose 模式,。NET 的其他用户就可以使用它。如果您在析构函数中进行清理工作,其他语言就无法显式调用您执行清理工作的代码。在 C# 和 Visual Basic 中没有 delete 操作符。

所以虽然您可以调用 delete 来调用您的析构函数,但不提倡将执行清理工作的代码放在析构函数中。较好的方法是实现 IDisposable,所有的语言都可以使用它。不过要注意,这种行为在 Visual C++? 2005 中有所变化。有关更多信息,请参考 Andy Rich 在 Deterministic Finalization IV - Benefits, part II 中关于 deterministic finalization 的讨论,以及当前的 C++/CLI Language Specification Standard。

问:我有一个非托管函数,它返回一个包含 char* 字符串的链接列表:

上一页  1 2 3 4 5 6 7  下一页

Tags:Visual 删除 托管

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接