让我们假设我有以下的类:
Class Foo {
public:
int j;
Foo(int i){
j = i;
std::cout << j << endl;
};
}我是C++新手,我很困惑下面两个代码块是否执行有关内存分配的相同活动。我记得了解到新动态分配内存,但我不确定第一个块。第一个街区也是这样吗?
Foo foo{2};Foo *foo2;
foo2 = new Foo(2);发布于 2022-05-28 05:15:33
案例1
在此,我们考虑:
Foo foo{2}; //this will create an object of type `Foo` on the stack上面的语句将使用Foo转换构造函数 Foo::Foo(int)在堆栈上创建一个类型为的对象。
案例2
在此,我们考虑:
Foo *foo2; //creates a pointer of type `Foo*` on the stack
foo2 = new Foo(2); //assign foo2 the pointer returned from new Foo(2)这里,我们首先在堆栈上创建一个名为foo2的Foo*类型的指针。注意,到目前为止,这个指针是uninitialized.
接下来,当我们编写foo2 = new Foo(2);时,会发生以下情况:
使用转换构造函数Foo::Foo(int).在堆上创建一个类型为Foo的对象,这是由于new Foo(2)造成的。
foo2 .还请注意,与其在构造函数内将i分配给j,不如在构造函数初始化程序列表中初始化j,如下所示:
Class Foo {
public:
int j;
//--------------vvvv--------------> initialize j in the member initializer list
Foo(int i): j(i){
std::cout << j << endl;
};
}https://stackoverflow.com/questions/72412846
复制相似问题