Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2012, 19:32   #11
MrGukk
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Я хочу сказать, что когда мы создаем объект через new вызывается его конструктор. Ваш вопрос был "что конструирует Single", я и ответил. Да, конструктор ничего не возрващает, но вы то НЕ вызываете конструкор а оператор new, а вот он возвращает.

В С++ нельзя вызывать конструкторы и деструкторы напрямую, явно (деструкторы можно, но ето скорее изключение и надо знать, что и зачем делается.).

В вашем случае деструктор вообще не вызывается (или по крайней мере я не вижу где удаляется addr).
Извиняюсь. Я видимо не правильно сформулировал вопрос.
Код:
Single* Single::CreateSingle()
{
    if(flag)
    {
        Single();// Здесь вызывается конструктор и потом сразу деструктор
        addr = new Single;
        std::cout<<"\nConstructor addr = " << addr;
        return addr;
    }
    else
        return NULL;
}
Вопрос был про строчку отмеченную красным. Что конструирует этот Single()? После него сразу вызывается деструктор (в самом верху порграммы - встроенный). Дальше уже выполняется new Single и т.д., но там всё ясно.
Т.е. если обобщить вопрос: С какой памятью (статической/динамической) будет работать конструктор если вызывать его в одном из методов класса (напр. Single() - как в примере выше - ошибки компиляции нет) и затем вызвать этот метод из вне? (конструктор приватный, метод публичный)

Последний раз редактировалось MrGukk; 20.08.2012 в 19:34.
MrGukk вне форума Ответить с цитированием
Старый 20.08.2012, 20:41   #12
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от MrGukk Посмотреть сообщение
Что конструирует этот Single()?
Временную переменную на срок действия текущего оператора (т.е. до ближайшей ; )

Вот так думаю будет понятней:
Код:
void SomeFunction(const Single& ref);
SomeFunction( Single() );
Или по-иному, все равно что написать просто:
123;
Выражение вычисляется но нигде не используется.
waleri вне форума Ответить с цитированием
Старый 20.08.2012, 22:29   #13
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2MrGukk
Цитата:
Что конструирует этот Single()
временный объект, очевидно же
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 23.08.2012, 17:42   #14
MrGukk
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 33
По умолчанию

Спасибо за ответы)
MrGukk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не вызывается функция JS Dexes PHP 1 01.02.2012 10:57
Процедура не вызывается Точьичка Общие вопросы Delphi 6 25.09.2011 17:52
EnumThreadWndProc не вызывается bro Win Api 4 16.04.2011 23:00
не вызывается Paint в borland 5 primeplus Общие вопросы C/C++ 4 08.08.2009 08:14
Не вызывается процедура. Что не так? KingMaker Общие вопросы Delphi 4 12.04.2009 00:59