Я с готовностью признаю, что все еще изучаю более тонкие ноты указателей на C/C++ и как они работают, но после некоторых исследований я просто не чувствую, что удобно с кодом ниже.Необработанный указатель внутри std :: make_shared
std::shared_ptr<CDKSCREEN> cdkScreen;
cdkScreen = std::make_shared<CDKSCREEN>(*initCDKScreen(newWin.get()));
использование сырья указателей внутри std::shared_ptr
свести на нет ли какой-либо из преимуществ, которые вы получаете от использования смарт-указатели? Или это все равно? Спасибо, и я ценю любые ответы на этот пост.
EDIT: Я не в полной мере реализовать цель функции reset()
, но спасибо всем, кто указал на это мне. Кажется, я могу передать пользовательский деструктор std::shared_ptr
, а также, как показано ниже:
std::shared_ptr<CDKSCREEN> cdkScreen(initCDKScreen(newWin.get()), destroyCDKScreen);
Я не уверен, что я понимаю вопрос, 'make_shared' строит динамически выделенный объект внутри. Вы можете поставлять необработанный указатель только при прямом создании объекта 'shared_ptr'. – JAB
@JAB вызывает код-ctor в этом случае –
@BartekBanachewicz Это означает, что CDKSCREEN сам по себе является указателем на какой-то тип и, таким образом, делает использование shared_ptr несущественным, поскольку объект, на который указывает, не получит преимуществ от его использования , – JAB