首页 > 试题广场 >

类A定义如下,则在横线处补充( )...

[单选题]
类A定义如下,则在横线处补充(      )可以完成拷贝aa到a(      )
Class A{
    Char*a;
Public:
    A():a(0){}
    A(char*aa) {
        a=_________;
        Strcpy(a,aa);
    }
    ~A(){delete [] a;}
};
  • new char[strlen(aa)+1]
  • char[strlen(aa)+1
  • char[strlen(aa)]
  • new char[sizeof(aa)+1]
请教下为什么在拷贝前要先new新的内存呢?
发表于 2021-08-09 08:50:30 回复(2)
关于d, 这里aa是一个指针,sizeof(aa)表示的是aa指针的大小,32位系统则为4(64位是8)
发表于 2020-03-18 18:19:36 回复(0)
利用new运算符进行内存申请操作,长度为aa字符串长度加上字符串结束标志‘\0’,总共申请strlen(aa)+1字节
发表于 2019-04-14 14:59:44 回复(0)
为什么不是sizeof(aa)+1?
发表于 2022-04-25 12:02:20 回复(3)
对于new运算符来说, 我们一般无需设计到 sizeof运算符!当然,这是在c++中, 若是在c下, 一般需要通过
int* ip = (int*)malloc(sizeof(int)) 的操作申请内存。
在c++下, 对于基本类型, new运算符的实现使用到了 malloc函数(事实上,有专门研究malloc操作符的人员,部分编译器确确实实是直接使用了别人设计好了的malloc函数,你可以去了解一下)。new运算符中用到了 operator new 操作符(void* mem = operator new(size_t size);), 而operator new操作符用到了malloc,并进行内存分配


发表于 2022-05-17 20:33:24 回复(0)
哪位大佬可以解释一下D 感谢感谢
发表于 2020-01-14 21:59:17 回复(3)