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