|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.06.2013, 07:49 | #1 |
Пользователь
Регистрация: 16.02.2013
Сообщений: 18
|
Временные объекты в выражениях
Есть класс:
*********************************** class SomeClass { public: SomeClass(): m_char(new char[2])protected: char* m_char;}; *********************************** В программе: *********************************** int main() { SomeClass sc1;} *********************************** Конструктор вызывается 5 раз: для sc1, sc2, sc3, два раза в операциях сложения. Деструктор вызывается только три раза (для sc1, sc2, sc3). Я так понимаю происходит утечка памяти. ========== ========== Я пробовал сделать так: *********************************** SomeClass& operator+(const SomeClass& sc) { SomeClass _sc_ptr;} *********************************** Необходимый конструктор: *********************************** SomeClass::SomeClass(const SomeClass& sc) { m_char =new char[2]} *********************************** В этом случае выдает ошибку: Invalid allocation size 4294967295 bytes Как сделать чтобы выражение "sc1 + sc2 + sc3" создавало временные объекты которые сами уничтожаются? Подскажите в каком направлении мне искать информацию. |
18.06.2013, 08:27 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
В вашем operator+ вы возвращаете ссылку на временный объект, который после выхода из operator+ уничтожается.
Переделайте SomeClass& operator+(const SomeClass& sc) на SomeClass operator+(const SomeClass& sc) |
18.06.2013, 17:28 | #3 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Теперь попробуй вот так:
Код:
|
20.06.2013, 05:42 | #4 |
Пользователь
Регистрация: 16.02.2013
Сообщений: 18
|
Благодарю.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты | ИльназВ | C# (си шарп) | 13 | 22.11.2012 19:00 |
Проверить правильность расстановки круглых и квадратных скобок в выражениях | tarasman11 | Паскаль, Turbo Pascal, PascalABC.NET | 13 | 06.07.2012 11:50 |
Временные классы | Granus | Общие вопросы C/C++ | 23 | 02.06.2011 11:10 |
Что означает isU в регулярных выражениях | sergeiqwe | PHP | 2 | 28.05.2010 11:49 |
Кириллица в регулярных выражениях | alx | PHP | 27 | 01.03.2008 19:07 |