Если я инициализирую структуру, содержащую указатель на себя в стеке, а затем возвращаю ее, будет ли указатель указыватьC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Если я инициализирую структуру, содержащую указатель на себя в стеке, а затем возвращаю ее, будет ли указатель указывать

Сообщение Anonymous »

Рассмотрим следующее:
  • У меня есть какой-то большой класс A. Я хочу извлечь часть его состояния/поведения в класс B и сохранить его как переменная-член.
  • Но для выполнения своей функции класс B требует информации от класса A, то есть: экземпляр класса A владеет экземпляром класса B, экземпляр класса B связан с экземпляром класса A. Я хочу реализовать это как экземпляр класса B, содержащий указатель на экземпляр класса A, но не управляющий им.
Также рассмотрите следующий контекст:
  • Я новичок в C++, но у меня есть некоторый опыт работы с языками со сборкой мусора.
  • У меня пока нет интуиции, когда мне следует выделить. Я понимаю, что контейнеры, самореферентные структуры данных и полиморфные классы в целом должны размещаться в куче, но я еще не знаю соглашений. std::vector выделяет свою память самостоятельно, но я думаю, что доменные классы не должны управлять своей собственной памятью?
Некоторые примеры кода, скомпилированные в Visual Studio 2022 с использованием стандарта C++20 на 64-битной платформе:

Код: Выделить всё

// self-referential-struct.cpp
#include 
#include 

namespace self_ref_struct {
struct Manager;

struct Employee {
std::string name{};
Manager* manager{ nullptr };

void greet();
};

struct Manager {
std::string name{};
Employee employee{};

Manager(std::string name, std::string employee_name) : name{ name } {
employee = Employee{ .name{employee_name}, .manager{this} };
}

void greet();
};

void Employee::greet() {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79355266/if-i-initialize-a-struct-that-contains-a-pointer-to-itself-on-stack-and-then-ret[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»