Можно ли передать указатель на символ const в качестве параметра для конструктора (списка инициализации) для переменной-члена указателя символа? - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь написать список инициализации для моего второго конструктора, но я не знаю, с чего начать.

#ifndef ASTRING_H
#define ASTRING_H value

#include "stdlib.h"
#include "string.h"
#include <iostream>

using namespace std;

class AString {
private:
  char* data;
  int size;

public:

  // Default constructor
  AString () : data('\0'), size(0){};
  // Copy from cstring
  AString (const char*);  // <- this is the constructor I'm having issues
                         //     writing an initialization list for
};

#endif

1 Ответ

1 голос
/ 20 апреля 2019

Проблема в том, что семантически const char* отличается от char*. Первое не позволяет указанным данным быть измененным, что допускается для последнего.

Поскольку переменная-член является char* по своей структуре, подразумевается, что она должна быть модифицируемой. Вы можете настроить свой код для копирования переданных данных в переменную-член или просто забыть обо всем и использовать std::string:

class AString {
private:
  std::string data;

public:
  AString(const char* data) : data(data) { }
};

Чтобы скопировать данные, вам нужно получить длину через strlen и запомнить до delete [] в деструкторе.

...