特别是当智能指针很好用时,为什么还要使用智能指针,如果不鼓励使用C++中的指针?举个例子:
class Object { }
smart_pointer < Object > pInstance;
//wherein I can use the very simple way
Object instance;
Run Code Online (Sandbox Code Playgroud)
当您需要维护对象的所有权时,智能指针很好.使用它们将确保适当的破坏.当指针被视为参考时,使用智能指针有时会更糟(例如,在性能方面).
指针是C++的一个重要组成部分,但使用它们变得更容易,因为C++ 11中的智能引入了移动语义(基本上unique_ptr可以实现).这就是为什么在现代代码中你应该总是使用std::unique_ptr或者std::shared_ptr如果可用的话.
编辑:你问了一个例子,指针可能有利于使用.我能想到的最常见的问题是某个系统的可选组件.该组件将使用大量内存,因此您不希望始终分配它,也不要控制其分配(因此它本身不能处于"空"状态,即不可为空).Boost.Optional和C++ 14-ish std::optional分配TOD 的POD-ish大小的内存,所以他们不会这样做.使用指针,您可以选择分配该内存:
class Outer {
std::unique_ptr<BigInner> optionalComponent;
public:
void initializeOptionalComponent() {
optionalComponent = new BigInner();
}
void useOptionalComponent() {
if (!optionalComponent)
// handle the error
// operate
}
};
Run Code Online (Sandbox Code Playgroud)
这将解决问题,但会引入明显的另一个问题:optionalComponent可以为null,这要求所有使用它的函数始终检查有效状态.如果它是一个简单的按价值成员,它将(或至少应该)始终处于有效状态.因此,如果您不需要指针,请不要使用它,使用vector<MyClass>和普通成员.
无论如何,在这种情况下使用智能指针可以让你保持零规则; 您不必编写析构函数,复制构造函数或赋值运算符,该类将安全地运行.
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |