2017-06-29 65 views
-2

我想了解如何定义一个函数作为friend function影响其在内存(RAM)中的位置。C++如何在内存位置的朋友功能不同?

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

friend功能属于哪里?

我担心的原因是由于[递归]函数已经通过多个线程在我的C++代码中调用了很多次,最终我得到了“v'table腐败运行时例外“。这是内存损坏的标志(例如as I saw here)。

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

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

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

+7

*“每个类都有其所有方法和函数的表”* - 你说这是基于什么?在C++标准中没有提及它。 – StoryTeller

+0

朋友功能是**不是**友好班的成员功能 –

+1

*例如,每个班级都有其所有方法和功能的表格。*嗯,不。有一个虚拟的虚拟表格,但就是这样。 – Borgleader

回答

8

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

即使一个friend函数被内联定义在一个类中,它仍然被认为是全局非成员函数。