2 / 2 / 0
Регистрация: 25.06.2013
Сообщений: 46
1

Указатель на Char. Функция присваивания и перегрузка оператора "="

28.01.2014, 17:01. Показов 1385. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем дело такое. При работе с указателем на char надо использовать глубокое копирование. И у меня в функции инициализации объекта класса есть строка выделения памяти. Так собственно в чем проблема: я такую строку включал в функцию присваивания и в перегрузку оператора. Честно говоря я не знаю зачем, без неё все работает. Но мне нужно как-то объяснить это преподавателю. Он сказал, что память, выделенная при инициализации объекта, теряется после работы функции и оператора. Так вот, если я все же уберу эти строки из функции и оператора, то станет ли все на место? То есть они будут работать с памятью, которая выделена при инициализации?
вот такой оператор у меня
C++
1
2
3
4
5
6
7
8
9
zvuk operator= (const zvuk &m)
{
if(this!=&m)
{
name=new char[strlen(m.name)+1];
strcpy(name, m.name);
//далее не связано с чар
}
return (*this);}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2014, 17:01
Ответы с готовыми решениями:

Перегрузка оператора присваивания
struct pointer_command { public: void * x; public: void set(void * y){x = y; } void...

Перегрузка оператора присваивания
Здравствуйте, недавно читал про перегрузку операторов и решил поупражняться с этим, однако на...

Перегрузка оператора присваивания
Всем привет! По заданию программа должна содержать перегруженную операцию «=», использование...

Перегрузка оператора присваивания
Вот есть такой класс template<typename TT> class Matrix { public:...

Перегрузка оператора присваивания
MyArray& operator=( MyArray &arrInt2 ) //Зачем писать MyArray& operator?А почему не MyArray...

3
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.01.2014, 17:25 2
Выделение памяти делается один раз при инициализации. Повторное выделение с сопутствующим освобождением ранее выделенной памяти следует делать при необходимости изменения размера контейнера. Иначе повторно выделять память причин нет.
1
2 / 2 / 0
Регистрация: 25.06.2013
Сообщений: 46
28.01.2014, 17:27  [ТС] 3
так значит, если я уберу выделение памяти оттуда, то при вызове оператора будет использоваться уже занятая память при инициализации?
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.01.2014, 17:32 4
Лучший ответ Сообщение было отмечено HeavDev как решение

Решение

Да. Но при этом нужно проверять, что для новой информации хватает места в уже выделенной памяти.
1
28.01.2014, 17:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2014, 17:32
Помогаю со студенческими работами здесь

Перегрузка оператора присваивания
Можно ли перегрузить в C# оператор присваивания ?

Перегрузка оператора присваивания
Приветствую всех. Не могли бы подсказать как переопределить оператор присваивания. То что искал,...

Перегрузка оператора присваивания
Доброго времени суток всем! Никак не могу правильно написать перегрузку оператора присваивания. ...

Перегрузка оператора присваивания
При перегрузке оператора присвоения выдает ошибки cpp(58) : warning C4996: 'strcpy': This function...

Перегрузка оператора присваивания
Доброго времени суток! Возник вопрос по поводу перегрузки оператора присваивания. Пример...

Перегрузка оператора присваивания
Задание простое: по заданному классу составить простую программу с использованием динамической...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru