【问题标题】:char initialization constructor in c++ [closed]C ++中的char初始化构造函数[关闭]
【发布时间】:2013-06-24 12:54:36
【问题描述】:

我已经写了这个构造函数来初始化字符类型数组

class StudentInfo
{
  char* vuId;
public:
  StudentInfo(char* vu_Id)
  {
    setVuId(vu_Id);
  }
  void setVuId(char* vu_Id)
  {
    vuId = new char[strlen(vu_Id) + 1];
    strcpy(vuId, vu_Id);
  }
};

此代码运行良好。但我想初始化而不必调用 setVuId 函数。有什么办法吗?

【问题讨论】:

  • 将setVuId 的主体移动到构造函数中?也建议改用std::string。
  • 我能否质疑您一开始就避免调用 setVuId 的愿望?

标签: c++ constructor


【解决方案1】:

确定:

#include <string>

class StudentInfo
{
  std::string vuId;
public:
  explicit StudentInfo(const char* vu_Id) : vuId(vu_Id) {}

};

【讨论】:

  • 你能解释一下最后一行的意思吗?我知道它是一个带有指向 const 字符参数的指针的构造函数,但什么是“:vuId(vu_Id)”
  • @Vivek:它在构造成员 vuID 时将参数传递给 std::string 的构造函数。谷歌“C++ 构造函数初始化列表”了解更多详情
  • 嘿朋友 - 让构造函数显式,也许?
  • @doctorlove: 好点 :)
【解决方案2】:

如果您可以容忍写时复制和相关开销,请使用 std::string,否则使用此:

#include <cstring>

class StudentInfo
{
  size_t len;
  char* data;

public:
  StudentInfo(char* vu_Id):
    len(vu_Id ? strlen(vu_Id) : 0),
    data(len ? (char*)memcpy(new char[len + 1], vu_Id, len + 1) : 0)
  {
  }

  virtual ~StudentInfo() {
    delete [] data;
  }
}

【讨论】:

猜你喜欢
  • 2020-10-04
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2018-06-30
  • 2012-05-12
  • 2021-06-30
  • 2017-03-07
相关资源
最近更新 更多