它有什么作用*((T**)m_ptr)?

what does it do *((T**)m_ptr)?

本文关键字:ptr 什么 作用      更新时间:2023-10-16

>我在代码中看到了这一点,但无法理解这里发生了什么:

T * ptr; // we have some pointer and it has proper adress
...
// Later I see this and I can't understand what is going here
ptr = *((T **)ptr);

另外,在稍后的代码中,我看到*((T**)ptr) = m_address;

这种结构使用什么?*((T**)ptr)

谢谢!

这意味着作者希望他们写T** ptr,并且正在通过将指针转换为与声明它不同的类型来绕过他们没有编写的事实,然后再取消引用它。它假装ptr指向T**而不是T*

在某些情况下,这种类型的双关语是可以的(例如,它通常与struct sockaddr类型一起使用以实现多态性),但是类型双关语T*T**是非常奇怪的。

事实上,除非Tchar,或者T有一个T*作为它的第一个成员并且没有填充,否则它也是一种代码异味(据我所知,UB)。

避免。