gpt4 book ai didi

casting - 从原始指针到帽子指针的 reinterpret_cast 的引用计数规则是什么?

转载 作者:行者123 更新时间:2023-12-04 05:03:44 24 4
gpt4 key购买 nike

如果我使用 reinterpret_cast转换自 IInspectable*Object^ ,我还负责发布原版IInspectable* ?

清楚地产生Object^当它超出范围时会释放自己,所以真正的问题是 reinterpret_cast 是否意味着一个 AddRef 给出了 Object^它自己的引用计数,或者它拥有我已经拥有的引用的所有权。

似乎有两种方式可以期待:一方面,COM 操作不应该接管其输入指针的引用计数——另一方面,名称 reinterpret_cast建议它只是将我的位从“原始 ABI 指针”重新解释为“已经拥有对象引用的带帽指针”,我的工作是确保这有意义)。

最佳答案

一个 reinterpret_cast<Object^>(iinsp)调用本身不会有与引用计数相关的副作用,但是,将该转换的结果分配给 Object^变量将导致在原始 IInspectable 指向的对象上发生 addref。当那 Object^变量超出范围或分配为空值,Release()同样将在底层对象上调用。这是否会导致对象超出范围将取决于它在整个业务之前的内部引用计数。例如:

void foo(IInspectable* p) {  //assume: this comes in with a single refcount
p->AddRef(); // refcount now 2
reinterpret_cast<Object^>(p); //refcount still 2
{
Object^ o = reinterpret_cast<Object^>(p); //refcount now 3
} //o goes out of scope, refcount now 2

p->Release(); // refcount now 1
} //refcount is still 1, the caller of function foo is responsible for cleaning him up

关于casting - 从原始指针到帽子指针的 reinterpret_cast 的引用计数规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15789479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com