C++中使用new创建类对象的含义、指针指向及构造函数调用疑问
核心概念纠正
你首先有个认知偏差需要先修正:Place* pool = new Place;中new Place创建的不是临时对象,而是在堆内存中分配的动态对象,它的生命周期会一直持续到执行delete pool时才结束,不属于临时对象的范畴。
问题1解答
pool是Place*类型的指针变量,本身并不是Place类的实例,没有park、num这些类成员。
它存储的是动态创建的完整Place对象的首地址,直接指向整个Place对象,不存在“各数据成员分别指向对应成员”的逻辑。你后续通过pool->成员名访问成员的本质是:先拿到pool存储的对象首地址,再根据该成员在类内存布局中的固定偏移量计算出成员的实际地址再访问。
问题2解答
只有new Place创建的那个Place类实例会调用默认构造函数完成初始化。
pool本身是指针类型的基础变量,不需要调用类构造函数,它的初始化就是把new返回的动态对象首地址赋值给自己。
额外提示:你贴的代码存在两处语法错误,修复后才能正常编译:
- 类定义结束后需要加英文分号,也就是类的闭合
}后面补; - main函数的定义需要加参数列表括号,改成
int main()
内容的提问来源于stack exchange,提问作者ttt23
相关产品推荐
相关产品推荐

