【发布时间】:2016-02-07 11:19:09
【问题描述】:
假设一个类完全定义在它的.cpp文件中,所以在源文件中你可以找到:
- 构造函数定义
- 析构函数定义
- 定义的每个方法
那为什么它的私有成员变量还必须在header文件中呢? 为什么我们仍然需要 PIMPL 来摆脱它们?
如果对于这个类我也在源文件中定义了自己的new operator,为什么我还需要从外部代码中知道大小?
是因为类仍然可以堆栈分配吗? 如果是这样,那么为什么在堆栈上分配的“函数”不是 .cpp 文件内的构造函数调用的一部分?
【问题讨论】:
-
如果您不知道需要多少位,并且无法找出答案,您将如何从一组位中创建一个对象?
-
顺便说一句:您并不总是需要知道对象的大小。例如。每当您使用前向声明时,大小仍然未知,但您仍然可以使用该类的对象。
-
@Peter 使用在其他源文件中定义的链接函数,它只是返回给我一个指针
-
这还不够,nyarlathotep。要返回指向对象的指针,该“链接函数”还需要从一组位中创建一个对象。
-
tobi - 前向声明只允许创建指针和引用。仅使用指向(如果有)或引用的对象是不够的。例如,
some_pointer->some_member_function()将生成编译错误,除非实际类型定义(不仅仅是前向声明)对编译器可见。
标签: c++ constructor destructor new-operator pimpl-idiom