C++ 友元函数在内存位置上有何不同?

c++ how does friend function differs in memory location?

本文关键字:何不同 位置 内存 友元 函数 C++      更新时间:2023-10-16

我试图理解将函数定义为friend function如何影响其在内存(RAM(中的位置。

例如,每个类都有一个包含其所有方法和函数的表。此外,虚拟功能放置在vtable中。

friend函数属于哪里?

我担心的原因是,由于 [递归] 函数在我的 c++ 代码中通过多个线程被大量调用,最终我得到"v'table 损坏运行时异常"。 这是内存损坏的迹象(例如,我在这里看到的(。

此外,将此函数声明为常规的类外函数时,异常仍然存在。

但是,当声明该函数friend时(这是一个糟糕的设计,但为了实验(,该异常不再弹出。

因此,我关于友元函数的内存位置的问题。

>friend与编译器、链接器或运行时加载器放置函数的位置无关,它只是一个关键字,告诉编译器该函数可以避开类的可见性规则。

即使friend函数在类中内联定义,它仍被视为全局非成员函数。