首页 > 试题广场 >

有以下程序 #include &nbs...

[单选题]
有以下程序
#include <iostream.h>
using namespace std;
class A {
    int *p,n;
public:
    A():p(0),n(0){}
    A(int q[10], int m) {
        n=m;
        p=__________;
        for(int i=0;i<m;i++)
            p[i]=*(q+i); 
    }
    ~A(){delete p;}
    int Get(int i) {return *(p+i);}
};

int main() {
    int s[10]={10,20,30,40,50,60,70,80,90,100};
    A a(s,10);
    int i=0,sum=0;
    for(;i<10;i++)
        sum=a.Get(i);
    cout<<"sum="<<sum<<endl;
    return 0;
}
程序运行结果是sum=100,请为横线处选择合适的程序()
  • &q[0]
  • q
  • new int(n)
  • new int[n]
这题应该是想考深层复制吧~析构函数的确有问题,应该释放整个数组的,这里只释放了首元素的内存。
发表于 2020-08-25 18:08:39 回复(0)
int *p= new int(10)分配一个int型变量内存空间,表示创建了一个int指针p,且指向内容初始化为10 int *p= new int[10]分配10个int型变量内存空间,表示创建了一个指向有10个int型元素的数组的int型指针p。
发表于 2020-04-21 17:13:06 回复(0)
选D的话,在删除内存块的时候没用delete []p
发表于 2019-08-24 23:18:43 回复(6)
C++中允许使用new a[n]来申请变长数组么。
发表于 2019-10-30 20:05:51 回复(2)
脑子告诉我应该用new [],但是你这析构函数又暗示我应该用(),好没水平的题,屏蔽了
编辑于 2023-12-23 13:11:38 回复(0)
如果选b,则p指向的数据在栈上所以不能使用delete删除
发表于 2022-12-11 22:40:59 回复(0)
析构函数?
发表于 2022-04-27 15:21:57 回复(0)
下面有循环赋值语句,故本题是想仅仅实现数组的复制,故实例化p即可。
发表于 2018-12-21 18:31:55 回复(0)