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

#c #class #initializer-list

#c #класс #список инициализаторов

Вопрос:

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

 #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(''), size(0){};
  // Copy from cstring
  AString (const char*);  // <- this is the constructor I'm having issues
                         //     writing an initialization list for
};

#endif
  

Комментарии:

1. «Я не знаю, с чего начать» — это не описание проблемы, и ни «это конструктор, с которым у меня проблемы», особенно когда он скрыт в коде. На вопрос в вашем названии легко ответить экспериментально. С вашей стороны.

Ответ №1:

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

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

 class AString {
private:
  std::string data;

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

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