2016-08-23 65 views
-1

我认为这应该是一些基本的,但我找不到一个好的关键字来搜索它。是否实例化更多对象会导致更多成员函数的实例化?

如果相同的成员函数实例化的越来越多,将内存方式移动到管理器类会更好吗?

+0

不是。这是一种常见的实现技术,将(参数)this参数作为参数传递给非静态成员函数 - 因此不会为每个实例化对象“生成”代码(某些thunk被排除)。 – Niall

+0

@Niall感谢您提供更全面的问答链接。你知道静态成员函数会发生什么吗?他们是否默默地实现了一个名称空间中的全局函数? – Sgene9

+0

类似的东西 - 它们与其他函数相同,但它们不会看到这个''不可见'',编译器负责范围/可见性和访问。 – Niall

回答

1

对象的实例化仅为对象的非静态数据成员分配内存,而不是成员函数。

如果你有一个类的两个对象,这并不意味着你也有两个类的成员函数的副本,而是this指针被传递给非静态成员函数来指定哪个对象是调用成员函数。

+0

你知道静态成员函数会发生什么吗?他们是否默默地实现了一个名称空间中的全局函数? – Sgene9

+0

不,我们仍然需要使用类或对象的名称来访问类的静态成员函数,即'MyClass :: aStaticMemberFunction()',只是'this'指针不会传递给静态成员函数。 –