gpt4 book ai didi

c++ - std::make_shared 中的原始指针

转载 作者:太空狗 更新时间:2023-10-29 19:51:59 26 4
gpt4 key购买 nike

我欣然承认我仍在学习 C/C++ 中指针的更精细说明以及它们的工作原理,但在做了一些研究之后,我只是感觉下面的代码不舒服。

std::shared_ptr<CDKSCREEN> cdkScreen;
cdkScreen = std::make_shared<CDKSCREEN>(*initCDKScreen(newWin.get()));

std::shared_ptr 中使用原始指针是否会抵消您使用智能指针所获得的任何好处?还是两种方式都一样?谢谢你,我很感激这篇文章的任何答案。


编辑:我没有意识到 reset() 函数的全部用途,但感谢所有向我指出这一点的人。看来我也可以将自定义析构函数传递给 std::shared_ptr,如下所示:

std::shared_ptr<CDKSCREEN> cdkScreen(initCDKScreen(newWin.get()), destroyCDKScreen);

最佳答案

我想你想保存 initCDKScreen 返回的指针。在这种情况下,您不必使用 make_shared。您应该将指针传递给构造函数或 shared_ptr::reset(...):

std::shared_ptr<CDKSCREEN> cdkScreen(initCDKScreen(newWin.get()));

因为 CDKSCREEN 应该被 destroyCDKScreen(CDKSCREEN *screen) 而不是 delete 销毁,你应该这样写:

std::shared_ptr<CDKSCREEN> cdkScreen(initCDKScreen(newWin.get()), destroyCDKScreen);

std::shared_ptr<CDKSCREEN> cdkScreen;
cdkScreen.reset(initCDKScreen(newWin.get()), destroyCDKScreen);

关于c++ - std::make_shared 中的原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com