Форум программистов, компьютерный форум CyberForum.ru

Почему создаются новые объекты? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
OMGHero
2 / 2 / 0
Регистрация: 16.02.2011
Сообщений: 36
19.02.2011, 01:03     Почему создаются новые объекты? #1
Всем доброго времени суток!
Я не могу понять где создаются новые объекты
Есть у меня простенький класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class data 
{
    char* str;
public:
    data(): str("Hi")
    {}
    data(char* ch): str(ch)
    {}
    void setData(char* ch)
    {
        str = ch;
    }
    void printData()
    {
        cout << str << endl;
    }
    virtual ~data ()
    {
        cout << "data deleted\n";
    }
    data& operator= (data& v)
    {
        str = v.str;
        return *this;
    }
};
Обратите внимение на перегруженный оператор = . Если я возвращаю ссылку на data (как в коде), то при присваивании одго экземпляра класса другому, деструктор ничего не пише мне в консоль. Если я возвращаю просто data
C++
1
2
3
4
5
    data operator= (data& v)
    {
        str = v.str;
        return *this;
    }
то при присваивании в консоле дает о себе знать деструктор.
Зачем компилятор создет еще один экземпляр класса data что бы просто передать *this ?
Если кто понимает, то объясните пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2011, 01:03     Почему создаются новые объекты?
Посмотрите здесь:

C++ как создаются 3д игры на с++?
имеется список указателей на авторские объекты, чё-то я могу воспользоваться только первым его элементом! Почему? C++
C++ Контролы создаются, но пропадают.
C++ В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться
Как на си++ создаются приложения с GUI? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.02.2011, 15:05     Почему создаются новые объекты? #21
OMGHero, хаааа. Переключил сборку на релизную - результат как у вас. Переключился обратно на дебажную - снова дважды вызывается деструктор... Видать для большей информации в дебажной сборке действительно все действия выполняются как надо, а в релизной всё оптимизируется по полной и оказывается, что без чего-то можно обойтись.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2011, 15:08     Почему создаются новые объекты?
Еще ссылки по теме:

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? C++
Классы: Не создаются объекты класса Apple C++
C++ OpenMP, не создаются потоки

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

Или воспользуйтесь поиском по форуму:
OMGHero
2 / 2 / 0
Регистрация: 16.02.2011
Сообщений: 36
19.02.2011, 15:08  [ТС]     Почему создаются новые объекты? #22
даа, переключил на дебажный режим - появилось две строчки =)
Yandex
Объявления
19.02.2011, 15:08     Почему создаются новые объекты?
Ответ Создать тему
Опции темы

Текущее время: 17:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru