【发布时间】:2021-11-23 16:23:15
【问题描述】:
#include <iostream>
using namespace std;
class Place{
private:
int park;
int num;
public:
Place() { park=1; num=1;};
}
int main{
Place* pool = new Place;
delete pool;
}
所以对于这部分代码Place* pool = new Place;,我相信默认构造函数会被调用,这意味着对象pool现在也被创建并指向一个带有Place类的临时对象。但究竟是什么意思?是指pool对象指向整个temp对象还是说pool对象中的每个数据成员分别指向temp对象中的数据成员?
另外,当Place* pool = new Place;被调用时,临时对象和pool都被默认构造函数初始化了吗?还是只有 temp 对象由默认构造函数初始化?在学习OOP主题和与构造函数和析构函数相关的主题时,我感到很迷茫。我希望我不要问一个愚蠢的问题。非常感谢您的所有帮助。
【问题讨论】:
-
“临时对象”是什么意思?
new Place;动态分配Place类型的对象并调用其默认构造函数(并返回指向它的指针)。在这段代码 sn-p 中也完全没有必要,Place pool;可以正常工作(如果不是更好的话) -
没有临时对象。如果你手动新建,别忘了删除销毁。请编写正确的构造函数。您的 int 值在构造函数主体中被初始化为 0 并被 1 覆盖。好的,编译器会在这种特殊情况下优化它。但从形式上看,这不是你所期望的!
-
我只是想知道这行代码是什么意思。正如
Place* pool = new Place;出现在我的作业中一样。但我不太明白 new 运算符如何处理对象类型。 -
这里是
new expression,如果这是混淆的来源,您必须查找该术语而不是operator new。 -
Google 是您的朋友。简而言之,就是在堆上分配内存(对于 Place 的成员来说足够大),将地址分配给池,并调用构造函数来初始化内存(最后两个不一定按顺序)。除非你调用delete,否则直到程序终止才会释放内存。
标签: c++ class oop constructor new-operator