c++ - 如果在没有 new 运算符的情况下初始化,C++ 是否将类对象视为值类型?

标签 c++ value-type reference-type

示例代码:

MyItemType a;
MyItemType b;
a.someNumber = 5;
b = a;

cout << a.someNumber << endl;
cout << b.someNumber << endl;

b.someNumber = 10;

cout << a.someNumber << endl;
cout << b.someNumber << endl;

输出:

5
5
5
10

如果 a 和 b 是引用类型,我猜最后两行应该是 10 和 10 而不是 5 和 10。

这是否意味着当你做这样的声明时:

AClassType anInstance;

它被当作值类型对待?

------这里是MyItemType.h------------

#ifndef MYITEMTYPE_H
#define MYITEMTYPE_H

class MyItemType{

public:
    int someNumber;
    MyItemType();
};

MyItemType::MyItemType(){
}

#endif  /* MYITEMTYPE_H */

最佳答案

基本上是的(如果您认为 C++ 等同于 Java 中的意思)。

AClassType anInstance; 是对象,不是引用。 MyItemType aMyItemType b 是不同的对象,它们驻留在不同的内存空间中,因此显然更改一个不会影响另一个。

当您执行 a=b 时,您不引用一个对象与另一个对象,但在这种情况下,进行成员赋值。基本上就像在说

a.someNumber = b.someNumber;

关于c++ - 如果在没有 new 运算符的情况下初始化,C++ 是否将类对象视为值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633824/

相关文章:

python - Eigen + MKL 或 OpenBLAS 比 Numpy/Scipy + OpenBLAS 慢

python - 如何在 CuPy 中分配倾斜的 2D 内存?

c++ - 重新编译二进制或派生类以在基类中添加新方法

c# - 值类型相对于引用类型的好处?

c# - 可与 switch() 一起使用的自定义结构/类型

C# - 在引用类型上使用私有(private) setter 和公共(public) getter

c# - 避免循环中的对象实例化 c# - 如何避免这种情况?

c++ - 使用 OpenCV sqrt 未处理的内存异常

c# - 在 C# 中,使用值类型与引用类型

c# - 为什么 C# 中的空结构会消耗内存