【发布时间】:2014-11-22 11:45:05
【问题描述】:
我有一个关于 c++ 11 中智能指针的问题。我已经开始研究 C++ 11(我通常使用 c# 编程)并阅读了一些关于智能指针的内容。现在我有一个问题,智能指针是否完全取代了“旧”样式的指针,我应该一直使用它们吗?
unique_ptr 似乎解决了 C++ 中内存管理的所有问题,还是我错了?
例如:
std::unique_ptr<GameManager> game (new GameManager());
game->Start();
似乎比:
auto *game2 = new GameManager();
game2->Start();
delete game2;
谢谢你,我有点困惑!
【问题讨论】:
-
在没有所有权问题的情况下,您不应该使用它们。例如,如果某个东西拥有游戏管理器,而其他东西想要使用它(例如多态)并且对其所有权或生命周期没有发言权,那么您可以考虑将原始指针传递给它。
-
谢谢,现在更清楚了
-
“解决所有问题” - 不。不过,它解决了很多问题。
-
尽管如此,在 C++ 中根本不需要使用动态内存。与 C# 不同,C++ 允许您在堆栈上创建类实例,并且它们在其包含范围退出时被销毁。
标签: c++ pointers c++11 smart-pointers unique-ptr