abstract_result
is-a result
(кстати, ваше наименование кажется неправильным), поэтому указатель на abstract_result
is-указатель на result
.Так что вам просто нужно создать unique_ptr
, например,
auto x = unique_ptr<result>(new abstract_result());
. Если экземпляр находится в стеке, и вас беспокоит, что unique_ptr
попытается удалить экземпляр с помощью автоматического хранилища, вы можете использоватьсредство удаления, которое ничего не делает, как в
template <typename T>
struct no_deleter {
void operator()(T*){}
};
abstract_result x;
std::unique_ptr<result> x_ptr{ &x, no_deleter<result>() };
Однако, в этом случае мне интересно, почему вы хотите использовать unique_ptr
в первую очередь.Нет ничего плохого в использовании необработанных указателей, если они не владеют объектом (т. Е. Тот, кто держит указатель, не отвечает за удаление объекта), тогда как unique_ptr
обычно предназначен для владения объектом, на который он указывает.
PS
Я должен признать, что не до конца понимаю, в чем ваша проблема ...
, но я хочу включить заполненный экземпляриз abstract_result в указатель на результат
Как упоминалось выше, указатель на abstract_result
является (небрежно говоря) уже указателем на result
.Более простой пример:
abstract_result x;
result* pointer_to_result = &x;