You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中char*类型成员的默认构造函数应如何赋值?

关于String类默认构造函数的正确实现

你当前写的默认构造函数name = new char[0];虽然语法合法,但存在隐患:这块长度为0的内存里没有字符串结束符'\0',后续调用strlen、strcpy这类依赖C风格字符串规则的函数时,会触发未定义行为。

正确的实现要保证默认构造出的是一个合法的空C风格字符串,推荐两种方式:

方式一:直接分配内存并初始化结束符

String(){
    // 分配1字节内存,专门存放'\0'
    name = new char[1];
    name[0] = '\0';
}

方式二:委托已有的带参构造函数(更简洁)

利用C++的构造函数委托特性,复用带参构造逻辑,避免重复代码:

// 先修改带参构造的参数为const char*,符合常量正确性
String(const char* str){
    name = new char[strlen(str) + 1];
    strcpy(name, str);
}

// 委托带参构造函数传入空字符串
String() : String("") {}

额外注意事项

  • 带参构造函数的参数建议改为const char*,因为传入的字符串常量不可修改,加const更安全。
  • 析构函数必须释放动态分配的内存,避免泄漏:
    ~String(){
        delete[] name;
    }
    
  • 拷贝构造和operator=要严格实现深拷贝,防止多个对象共享同一块内存导致重复释放的问题。

内容的提问来源于stack exchange,提问作者zaraboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:57:35