static — передать указатель по ссылке переполнение стека

Да, я прочитал много уроков и вопросов, а также перепробовал множество комбинаций, но, похоже, это не сработало.
Моя цель — не использовать динамическое распределение.

Мои занятия выглядят так:

Pages
Page
PMain:Page
PCam:Page

на моей главной, когда я делаю это:

1.
главный:

Page * page;
PCam main;
main.setContext(context);
page = &main;
page->echo();

Результат: PCam

но когда я пытаюсь создать экземпляр внутри внешнего класса и указать его на странице, это не удается.

2.

класс страниц:

Pages::Pages(Page*& page, Context& context){
this->context = &context;
PMain main;
main.setContext(*this->context);
main.echo();
// page = &main; <---
}

главный:

Page * page;
Pages pages(page, context);
page->echo();

результат: страница

ожидаемый результат: PCam

Мои занятия:

Страница:

void Page::setContext(Context & context)
{
this->context = &context;
}
void Page::echo()  //virtual
{
std::cout << "echo Page"  << std::endl;
}

PMain:

void PMain::echo(){
std::cout << "echo PMain"  << std::endl;}
}

PCAM:

void PCam::echo(){
std::cout << "echo PCam"  << std::endl;}
}

Любая помощь будет оценена. Благодарю.

0

Решение

Ваша проблема или одна из них заключается в следующем:

Pages::Pages(Page*& page, Context& context){
[...]
PMain main;

является локальной переменной стека Когда эта функция возвращается, она перестает существовать.
Если вы присвоили его указателю, вы получите неопределенное поведение используя его.

Моя цель — не использовать динамическое распределение.

Если у вас нет какой-либо конкретной причины, это в основном бессмысленная цель. Если вы хотите указатель на объект стека (то есть объект, который не выделяется динамически), этот объект должен оставаться в области действия до тех пор, пока вы используете указатель. Если вы не можете этого сделать, то вам нужно поместить его в кучу (т.е. динамически распределять).

1

Другие решения


По вопросам рекламы [email protected]