标题:使用new创建动态数组的问题
只看楼主
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
结帖率:90.38%
已结贴  问题点数:20 回复次数:7 
使用new创建动态数组的问题
C++用new运算符创建动态数组有个特性,当在程序运行时需要数组的时候则创建它,如果不需要,则不创建。
那么怎么判断程序在运行时到底有没有创建数组呢?
比如以下这段程序,这段程序在运行的时候到底需不需要创建数组?到底有没有创建数组呢?代码如下:
程序代码:
#include<iostream>
using namespace std;
int main(void){
    double *a=new double [3];
    a[0]=2.3;
    a[1]=3.3;
    a[2]=4.3;
    cout<<"a[1]="<<a[1];
    return 0;
}
搜索更多相关主题的帖子: new 创建 运行 数组 动态 
2020-08-03 23:55
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
你从哪儿听来的?

当在程序运行时需要数组的时候则创建它,如果不需要,则不创建。
这个“需要/不需要”取决于你自己,你认为需要那你就写new,你认为不需要那你就不new。与C++、与编译器无关。

到底有没有创建数组呢?
这取决于编译器的优化,但与你无关,因为无论编译器怎么优化,其外在表现都应该跟你的代码一致。
举个例子,即使编译器将你的代码优化成 int main(void) { cout << "a[1]=" << 3.3; return 0; },但你需要关心吗?不需要呀!因为优化后的代码外在行为与你原代码的外在行为一致。就像你叫外卖,别人将外卖送给你就行了,你管别人是用脚走过来的,还是开劳斯莱斯过来的。
2020-08-04 08:29
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:5 
你想说的大概是 写时拷贝
这种层面的技术对你的代码来说的透明的
你不用分析这个技术

https://zh.
2020-08-04 10:58
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
不管是分析代码运行还是调试代码
这个技术都不会影响结果


https://zh.
2020-08-04 10:59
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
得分:0 
回复 2楼 rjsp
书上有一段这样的描述:

2020-08-04 14:08
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:5 
程序代码:
    int b[5];    //编译时分配内存
    int *c = new int[5];    //编译时分配内存

    int *a, n;
    scanf("%d", &n);
    a = new int[n];    //根据输入的n,创建n个元素的数组,n也可以是其他方式计算出来的。
2020-08-04 15:10
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:5 
如 @rjsp 所说, 不论编译器的行为是什么, 都和你没有关系
在 Clang 10.0.0 下, 不开优化 (-O0), 会明确调用 operator new, 也就是说发生了内存申请
但是在优化等级开到第一级 (-O1) 的情况下, 就会直接输出 0, 不会产生内存分配
GCC 的行为也是类似的
2020-08-05 00:47
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 5楼 hffjhhh
这段话的意思是
需要分配内存 就写new
不需要分配内存 就不写new

https://zh.
2020-08-05 10:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502728-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.188984 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved