最近我遇到了一个包含私有唯一指针成员变量的类。在构造函数中它用 make_unique 初始化,在析构函数中用 reset 清除。我知道 make_unique 执行堆分配。这种开销有什么原因吗?为什么不使用“普通”成员变量。
创建类的unique_ptr成员变量有几个正当理由。如果没有看到课程,我无法说出哪个适用;正如我在评论中所写的那样reset,在析构函数中明确调用似乎非常糟糕,所以我认为我不会让作者受益。
以下是我能想到的一些原因:
unique_ptr<Base>并且您实际上可以指向 a Derived。std::mutex; 作为成员变量非常尴尬。在 17 中,不可移动的对象可以从函数中返回,因此它们并没有那么糟糕。但是在 14 或之前,不可移动的物体真的很烦人。所以你的对象可以容纳一个unique_ptr<mutex>而仍然是可移动的。这种变体是移动昂贵的类型(具有大量成员的结构)或不遵守适当的异常安全保证(但这很少是有效的恕我直言)。unique_ptr<InitInfo>或类似的东西,你可以调用,reset这样一旦你的程序在长时间运行的性能关键部分启动并运行,你就返回了大量内存。一个不好但常见的使用原因unique_ptr是推迟初始化,即您需要在构造一个整体的对象之后构造一个成员。这通常很糟糕,但即使您需要这样做,您也可以使用optional.
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |