Я не понимаю
Что за динамическое выделение в классах?
разве m_string не указатель?
class MyString
{
private:
char *m_string; // динамически выделяем строку
int m_length; // используем переменную для отслеживания длины строки
public:
int getLength() { return m_length; } // функция доступа для получения значения m_length
};
C/C++
C++, помогите с классами
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; } // возвращает длину строки
};
{
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; } // возвращает длину строки
};
m_string указатель
в классе нет пользовательского конструктора, значит, поля m_string и m_length примитивных типов никак не инициализируются, и в них может быть что угодно (обычно мусор или нули)
динамического выделения памяти под m_string я тут тоже не вижу
в классе нет пользовательского конструктора, значит, поля m_string и m_length примитивных типов никак не инициализируются, и в них может быть что угодно (обычно мусор или нули)
динамического выделения памяти под m_string я тут тоже не вижу
Есть динамическая память и статическая память. В статической памяти память выделяется до выполнения программы. А динамическая память выделяется по ходу выполнения. Указатель указывает адрес памяти, где хранятся данные в вашем случае.
m_string это указатель.
m_string это указатель.
Похожие вопросы
- Программирование на C. Помогите бездарю
- C++ ПОМОГИТЕ ПЛИИЗ
- Задача на c++ помогите решить без рандомного заполнения массива
- Читаю книжку по C, помогите с указателями
- C++ Помогите люди!
- C++ ПОМОГИТЕ ПОЖАЛУЙСТА
- Задача на C++, помогите решить.
- C++,помогите срочно!!! Ни как не могу понять как решить данную задачу
- Знающие C++, помогите пожалуйста:)
- Можно через delete [ ] ? c++ помогите пожалуйста!