在c++中创建对象

问题描述 投票:0回答:1

考虑我们有一个类

Foo
,其中我们有一个默认构造函数和复制构造函数创建像
Foo f1
Foo f1 = Foo()
这样的对象之间有什么区别,在我的测试中它们都调用默认构造函数,它们是否保留在不同的内存中位置与指针创建的位置相同

c++ class
1个回答
0
投票

在 C++17 之前,在

Foo f1 = Foo();
中,允许编译器创建临时
Foo
实例,然后将其移至
f1
(查找“移动语义”)。

自 C++17 起,编译器不允许创建临时(“强制复制省略”),因此两者几乎完全等效。

区别在于,对于某些类型,

Foo f1;
将使对象保持未初始化状态,而
Foo f1 = Foo();
会将其归零(就像
Foo f1{};
一样)。这适用于所有非类类型,以及那些没有自定义默认构造函数或在类主体内部标记为
=default
的类。

© www.soinside.com 2019 - 2024. All rights reserved.