Pho*_*rga 3 c++ pointers raii c++11
我很乐意继续学习C/C++中指针的精细笔记以及它们是如何工作的,但经过一些研究后,我对下面的代码感到不舒服.
std::shared_ptr<CDKSCREEN> cdkScreen;
cdkScreen = std::make_shared<CDKSCREEN>(*initCDKScreen(newWin.get()));
Run Code Online (Sandbox Code Playgroud)
内部原始指针的使用是否std::shared_ptr会使您使用智能指针获得的任何好处无效?或者两种方式都一样吗?谢谢你,我感谢这篇文章的任何答案.
编辑:我没有意识到该reset()功能的全部目的,但感谢所有向我指出这一点的人.看来我也可以传递自定义析构函数std::shared_ptr,如下所示:
std::shared_ptr<CDKSCREEN> cdkScreen(initCDKScreen(newWin.get()), destroyCDKScreen);
Run Code Online (Sandbox Code Playgroud)
我想你想保存initCDKScreen返回的指针.在这种情况下,您不必使用make_shared.您应该将指针传递给构造函数或shared_ptr::reset(...):
std::shared_ptr<CDKSCREEN> cdkScreen(initCDKScreen(newWin.get()));
Run Code Online (Sandbox Code Playgroud)
既然CDKSCREEN应该被破坏destroyCDKScreen(CDKSCREEN *screen)而不是被破坏delete,你应该写下这样的东西:
std::shared_ptr<CDKSCREEN> cdkScreen(initCDKScreen(newWin.get()), destroyCDKScreen);
Run Code Online (Sandbox Code Playgroud)
要么
std::shared_ptr<CDKSCREEN> cdkScreen;
cdkScreen.reset(initCDKScreen(newWin.get()), destroyCDKScreen);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |