Я хотел бы знать, что в настоящее время рассматривается в передовой практике при возвращении указателя на полиморфный объект из функции, например, при использовании заводов. Если я передам право собственности, должен ли я вернуть boost::unique_ptr<Interface>
? Что я должен вернуть, если я не передаю право собственности (например, верну ссылку на член)? Существует ли альтернативный, не основанный на усилении способ, который также широко используется? Благодарю.Возвращаемые полиморфные объекты C++ (интерфейсы)
EDIT: он должен быть C++ 03 совместимо с возможностью легко обновить до 0x
EDIT2: Пожалуйста, обратите внимание, что я явно прошу о общих подходов, лучшие практиками, а не только «способ сделать это». Решение, подразумевающее условный поиск и замену над кодовой базой в будущем, не похоже на хорошую практику, не так ли?
EDIT3: Еще один момент, касающийся auto_ptr, заключается в том, что он - это, который не рекомендуется, независимо от того, насколько он чист, поэтому странно рекламировать его использование на уровне интерфейса. Затем кто-то не знает, вернет ли указатель в контейнер STL и т. Д. И т. Д. Поэтому, если вы знаете другое как-то общее решение, вы можете добавить ответ.
Вы можете пожаловаться на все, что хотите, о том, как ':: std :: auto_ptr' устарел, факт: вы не можете сделать лучше без накладных расходов или сужения интерфейса. Если вы используете ':: std :: tr1 :: shared_ptr', вы получаете подсчет ссылок, когда он вам не нужен. Действительно, ':: std :: auto_ptr' - единственное разумное решение, доступное в C++. ':: boost :: unique_ptr' просто удаляет проблемные операции из' :: std :: auto_ptr'. И хотя некоторые могут подумать, что это лучше, это сторонняя библиотека, и я не могу рекомендовать использование сторонней библиотеки как «лучшей практики», если не будет альтернативы. – Omnifarious
@ Omnifarious: Я ценю, что вы отвечаете, но я также пытаюсь побудить других людей поделиться своим мнением. –
Есть ли причина, по которой вы не рассматриваете 'shared_ptr' для этого? –