Какой тип указателя использовать, если я не знаю контекст, в котором используется указательC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Какой тип указателя использовать, если я не знаю контекст, в котором используется указатель

Сообщение Гость »


Я разрабатываю библиотеку, поэтому не знаю контекст приложения, которое позже будет использовать библиотеку. У меня два класса. Класс Window регистрирует виджеты, поэтому он может, например. пересылать события пользовательского интерфейса в виджеты. Класс Widget представляет виджет, отображаемый в графическом интерфейсе.

В сценарии №1 приложение, использующее библиотеку, создает объект виджета, устанавливает заголовок один раз и затем добавляет его в окно. В этом случае я бы предложил уникальный указатель вместо необработанного указателя в методе AddWidget. Потому что приложению больше не нужен объект виджета. Право собственности может быть передано объекту окна.

В сценарии №2 приложение снова создает объект виджета и добавляет его в окно. Но во время выполнения приложению по-прежнему необходим доступ к объекту виджета, чтобы изменить заголовок. В этом случае я бы предложил общий указатель вместо необработанного указателя в методе AddWidget. Потому что нам нужна общая собственность.

виджет класса { публика: Виджет() : title_("") {} ~Виджет() {} void SetTitle(std::string title); частный: std::string title_; }; класс Окно { публика: Окно() {} ~Окно() {} void AddWidget (виджет * виджет); частный: std::vector widgets_; }; Каков правильный подход к решению этой проблемы? Можно ли всегда использовать общие указатели при написании библиотеки, потому что я не знаю контекста? Должен ли я просто использовать необработанные указатели и сделать управление памятью проблемой приложения? Поддержка обоих типов указателей (общий и уникальный указатель), вероятно, приведет к взрыву кода.
Ответить

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

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

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

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

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