C/C++

C++, помогите с классами

Я не понимаю
Что за динамическое выделение в классах?
разве m_string не указатель?
class MyString
{
private:
char *m_string; // динамически выделяем строку
int m_length; // используем переменную для отслеживания длины строки

public:
int getLength() { return m_length; } // функция доступа для получения значения m_length
};
class MyString
{
private:

int m_length; // длина строки
char *m_string; // указатель на char

public:

MyString() : m_length(0), m_string(nullptr) {} // конструктор без параметров

MyString(const char* str) : m_length(strlen(str)), m_string(new char[m_length]) {
for (int i = 0; str[i]; ++i) m_string[i] = str[i];
} // конструктор c параметром

MyString(const MyString& ms) : m_length(ms.m_length), m_string(new char[m_length]) {
for (int i = 0; str[i]; ++i) m_string[i] = ms.m_string[i];
} // конструктор копирования

~MyString() { // деструктор
if (m_string != nullptr) {
delete[] m_string;
m_string = nullptr;
}
}

MyString& operator=(const MyString& ms) { // оператор присваивания
if (&ms != this) {
delete[] m_string;
m_length = ms.m_length;
m_string = new char[m_capacity];
for (auto i = 0U; i < m_length; ++i) m_string[i] = ms.m_string[i];
}
return *this;
}

int length() { return m_length; } // возвращает длину строки
};
Алексей Рыбак
Алексей Рыбак
95 398
Лучший ответ
m_string указатель
в классе нет пользовательского конструктора, значит, поля m_string и m_length примитивных типов никак не инициализируются, и в них может быть что угодно (обычно мусор или нули)
динамического выделения памяти под m_string я тут тоже не вижу
Есть динамическая память и статическая память. В статической памяти память выделяется до выполнения программы. А динамическая память выделяется по ходу выполнения. Указатель указывает адрес памяти, где хранятся данные в вашем случае.
m_string это указатель.
ДП
Денис Павлов
28 652