【发布时间】:2013-07-09 08:30:58
【问题描述】:
如何使用“新”被认为是动态的?我知道它被放在堆上,返回一个指针并保持不变,但我还没有认识到它在分配方面的“动态”性质。
在以下情况下,两个数组都是在运行时分配的,即使是静态方法。所以我看不出有什么不同。而且我不相信动态增加/缩小分配是可能的,对吗?
int size = 0;
std::cout << "enter size: ";
std::cin >> size;
int* array_d = new int[size]; // "dynamic" allocation
int array_s[size]; // static allocation correct?
【问题讨论】:
-
动态和静态在这个例子中被简单地使用了。这种“静态”分配与实际的静态分配无关——它只是暗示这个数字是一个常数。 (顺便说一句,代码无效,因为
size不是常量,所以arrray_s是错误的) -
这两种代码都不是你应该在 C++ 中使用的代码——但是出于非常不同的原因(一个是非法的,另一个是坏的)。
-
代码为我编译和运行(gcc 版本 4.2.1)。为什么都是坏代码?另外我仍然不确定“新”是如何动态的,因为两者都是在运行时设置的,并且都不能在运行时增长/缩小。
-
@user1229895 当你传递选项
-pedantic时它不会编译。该代码是非法的 C++,GCC 只是碰巧允许它。new是手动内存管理,脆弱且容易出错,在现代 C++ 中没有任何作用。 -
@KonradRudolph 感谢您指出这一点,那么应该使用什么来代替
new呢?
标签: c++ arrays memory-management new-operator