c++ - 通过以下两种方式分配指针对象有什么区别?

标签 c++ visual-c++ com

我创建了一个名为 Test.dll 的 COM 组件,其中我创建了一个 IDiscover 接口(interface)。

现在我想到了两种分配内存的方法

  IDiscoverPtr id(__uuid(TestClass)); and Test::IDiscover *id=NULL;

这两者有什么区别....欢迎提供任何信息..

最佳答案

第一个是智能指针,第二个是普通指针。

您无需担心 Releasing 智能指针,而您必须显式 Release() 一个普通的 COM 接口(interface)指针。

有关智能指针的更多详细信息,Look Here

除此之外,第一个将尝试从注册表中为您名为 TestClass 的类找到一个 GUID,并将尝试通过 CoCreateInstance API 创建此类的实例称呼。它将尝试通过所述 CoCreateInstance 调用获取 IDiscover 接口(interface)指针,如果失败,将抛出错误。成功执行 IDiscoverPtr id(__uuid(TestClass)); 行后,您应该在 id 中有一个有效的 IDiscover 接口(interface)指针。

第二个只是接口(interface)指针的声明,没有别的。您必须自己通过(大多数时候)CoCreateInstance 或其变体之一来实例化它。

关于c++ - 通过以下两种方式分配指针对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1163250/

相关文章:

c# - 如何跨进程边界编码进程外 COM 引用?

c++ - C++中Stringstream字符串到整数的转换

c++ - CRC32(循环冗余校验和)到字符串

c++ - 将 LD_PRELOAD 添加到 CLion 中的 'run' 可执行文件

c++ - 为什么 MSVC10 忽略我的#pragma 警告(禁用 : 4251)?

c++ - 数据结构的局部性是什么意思?

c# - 在 COM DLL 和 C# 之间进行通信

c# - 经典 asp/vbscript 文件中的 COM 包装 dll 不创建对象

c++ - 错误 : invalid conversion from ‘void*’ to ‘test::apr_size_t* {aka long unsigned int*}’ [-fpermissive]

c++ - 如何将 std::dec/hex/oct 放入查找数组