【发布时间】:2017-06-21 14:07:27
【问题描述】:
我从 c# 来到 c++,我不明白什么是动态对象。因此,假设您有 A 类并创建像 A *a = new A() 是 Normal 的对象,但对象 a 是什么?它和数组一样还是什么?我们可以写成 a[0] 还是 a[1]?但是如果我们重载 operator [] 并且如果我们在那里有数据并且想要正常获取数据并且想要创建动态对象会发生什么?
【问题讨论】:
-
a是一个指针,它保存着类A的动态分配实例的地址。一般来说,您不需要使用new来创建新实例(并且应该避免像瘟疫一样)。 -
对于初学者,我认为最好了解 C++ 的堆栈与堆内存分配。您可以在以下链接中找到。 learncpp.com/cpp-tutorial/79-the-stack-and-the-heap
-
在类上重载 operator[] 与在原始指针上使用 [] 无关。如果你想调用类的 operator[] 那么你必须首先取消引用指针。
-
A *a = new A; 之间没有太大区别。和 A *a = 新 A[1];我认为的区别在于,在后一个版本中,您需要对其调用 delete [] 并且您可能只能调用该类型的默认构造函数。
标签: c++ pointers object dynamic