shared_ptr - ccomptr 交换

发布于 2024-10-22 05:41:29 字数 264 浏览 4 评论 0原文

我在这里有一个简单的问题

假设我们有一个使用 shared_ptr/enable_shared_from_this 的代码库。

我们被要求将代码库的一部分转换为 COM 服务器,我们应该在其中使用 CComPtr 来代替,虽然这不是强制性要求......

现在是问题; atl/com+ 中是否有任何模仿 enable_shared_from_this 的功能?

I got a simple question here

Let's suppose we have a codebase that employs usage of shared_ptr/enable_shared_from_this.

And we have been asked to convert -a portion of- the codebase into a COM server where we are supposed to use CComPtr instead, while it is not a mandatory requirement...

now here is the question;
Is there any functionality within the atl/com+ that mimics enable_shared_from_this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

给我一枪 2024-10-29 05:41:29

使用 CComPtr 时不需要 enable_shared_from_this,因为 CComPtr 不维护引用计数。相反,它指向的对象维护引用计数。 CComPtr 所做的只是调用对象上的成员函数来增加或减少引用计数。执行以下操作是没有问题的:

void Func(IUnknown* someObj)
{
    CComPtr ptrA = someObj;
    CComPtr ptrB = someObj;
}

There is no need for enable_shared_from_this when using CComPtr because CComPtr does not maintain a reference count. Instead, the object it points to maintains the reference count. All CComPtr does is call member functions on the object that increment or decrement the reference count. There is no problem with doing the following:

void Func(IUnknown* someObj)
{
    CComPtr ptrA = someObj;
    CComPtr ptrB = someObj;
}
蓝色星空 2024-10-29 05:41:29

COM对象有很多规则,并不像声明智能指针那么容易。我建议研究这个主题,这不是可以浓缩成简短答案的东西。

There are lots of rules for COM objects, it's not as easy as declaring a smart pointer. I'd suggest studying up on the subject, it's not something that can be condensed into a short answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文