-1

文字型配列を初期化するためにこのコンストラクターを作成しました

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 関数を呼び出さずに初期化したい。とにかくそれを行うことはありますか?

4

2 に答える 2

8

承知しました:

#include <string>

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

};

于 2013-06-24T12:56:52.500 に答える
0

コピーオンライトと関連するオーバーヘッドを許容できる場合は 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;
  }
}
于 2013-06-24T13:05:58.657 に答える