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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2013, 19:05   #1
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию Создание объекта в параметре ф-ции.

Добрый день.
Тема может звучать странно - не знаю, как корректно сформулировать вопрос.

Имеется картина:

Код HTML:
class A;
class B;

class A
{
    B *copy;
public:
    A(B &p)
    {
        copy = &b
    }
    void acceptRule()
    {
        /*some action*/
    }
};
Код HTML:
A obj(B() << param1 << param2);
obj.acceptRule();
До вызова ф-ции acceptRule() у созданного объекта
Код HTML:
(B() << param1 << param2)
уже был вызван деструктор, а указатель copy ссылается в никуда. Можно либо отдельно создать локальный объект класса B и его передавать в качестве аргумента, или вызывать ф-цию acceptRule() в теле конструктора. Мне интересно, когда именно вызывается деструктор? Когда программа выходит из области видимости конструктора А? И как правильно называется такая инициализация obj?

Последний раз редактировалось Любопытный человек; 09.05.2013 в 19:07.
Любопытный человек вне форума Ответить с цитированием
Старый 09.05.2013, 20:10   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
A(B &p)
{
    copy = new B;
    *copy = p;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.05.2013, 03:26   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
уже был вызван деструктор, а указатель copy ссылается в никуда
потому что ты хранишь ссылку на локальный объект, локальный объект уничтожается и ссылка ссылается "в никуда"

Ты можешь переместить локальный объект в свою функцию - смотри про r-значения, и l-значения.
rrrFer вне форума Ответить с цитированием
Старый 10.05.2013, 08:58   #4
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Вариант с выделением динамической памяти очень даже подходит для решения данной задачи, т.к память будет помечена как занятая под объект до тех пор, пока не будет явно освобождена. Просто храня адрес объекта (а не сам объект, используя динамическую память) указатель станет "висячим" - сначала вызовется деструктор объекта и,как результат, указатель copy будет указывать на уже не существующий объект.
Igor95 вне форума Ответить с цитированием
Старый 11.05.2013, 17:10   #5
Любопытный человек
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 39
По умолчанию

Спасибо за ответы!
Любопытный человек вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Java] Создание объекта внутри объекта этогоже класса. Svarogich Помощь студентам 2 01.08.2011 16:03
Создание объекта. 1ord PHP 1 04.06.2011 20:10
Создание объекта.. RYaroslav Общие вопросы C/C++ 10 16.05.2011 23:23
ООП. Создание объекта Lisёноk Помощь студентам 2 23.09.2010 00:29
Динамическое создание объекта Fruit Общие вопросы Delphi 2 16.01.2008 21:18