Какой тип указателя использовать, если я не знаю контекст, в котором используется указатель ⇐ C++
-
Гость
Какой тип указателя использовать, если я не знаю контекст, в котором используется указатель
Я разрабатываю библиотеку, поэтому не знаю контекст приложения, которое позже будет использовать библиотеку. У меня два класса. Класс Window регистрирует виджеты, поэтому он может, например. пересылать события пользовательского интерфейса в виджеты. Класс Widget представляет виджет, отображаемый в графическом интерфейсе.
В сценарии №1 приложение, использующее библиотеку, создает объект виджета, устанавливает заголовок один раз и затем добавляет его в окно. В этом случае я бы предложил уникальный указатель вместо необработанного указателя в методе AddWidget. Потому что приложению больше не нужен объект виджета. Право собственности может быть передано объекту окна.
В сценарии №2 приложение снова создает объект виджета и добавляет его в окно. Но во время выполнения приложению по-прежнему необходим доступ к объекту виджета, чтобы изменить заголовок. В этом случае я бы предложил общий указатель вместо необработанного указателя в методе AddWidget. Потому что нам нужна общая собственность.
виджет класса { публика: Виджет() : title_("") {} ~Виджет() {} void SetTitle(std::string title); частный: std::string title_; }; класс Окно { публика: Окно() {} ~Окно() {} void AddWidget (виджет * виджет); частный: std::vector widgets_; }; Каков правильный подход к решению этой проблемы? Можно ли всегда использовать общие указатели при написании библиотеки, потому что я не знаю контекста? Должен ли я просто использовать необработанные указатели и сделать управление памятью проблемой приложения? Поддержка обоих типов указателей (общий и уникальный указатель), вероятно, приведет к взрыву кода.
Я разрабатываю библиотеку, поэтому не знаю контекст приложения, которое позже будет использовать библиотеку. У меня два класса. Класс Window регистрирует виджеты, поэтому он может, например. пересылать события пользовательского интерфейса в виджеты. Класс Widget представляет виджет, отображаемый в графическом интерфейсе.
В сценарии №1 приложение, использующее библиотеку, создает объект виджета, устанавливает заголовок один раз и затем добавляет его в окно. В этом случае я бы предложил уникальный указатель вместо необработанного указателя в методе AddWidget. Потому что приложению больше не нужен объект виджета. Право собственности может быть передано объекту окна.
В сценарии №2 приложение снова создает объект виджета и добавляет его в окно. Но во время выполнения приложению по-прежнему необходим доступ к объекту виджета, чтобы изменить заголовок. В этом случае я бы предложил общий указатель вместо необработанного указателя в методе AddWidget. Потому что нам нужна общая собственность.
виджет класса { публика: Виджет() : title_("") {} ~Виджет() {} void SetTitle(std::string title); частный: std::string title_; }; класс Окно { публика: Окно() {} ~Окно() {} void AddWidget (виджет * виджет); частный: std::vector widgets_; }; Каков правильный подход к решению этой проблемы? Можно ли всегда использовать общие указатели при написании библиотеки, потому что я не знаю контекста? Должен ли я просто использовать необработанные указатели и сделать управление памятью проблемой приложения? Поддержка обоих типов указателей (общий и уникальный указатель), вероятно, приведет к взрыву кода.
Мобильная версия