c++ - std::unique_ptr 和 reset() 或您的类的 Reset 方法?

标签 c++ c++11 memory-management class-design unique-ptr

使用 std::unique_ptr::reset,您可以轻松地将实例恢复到全新状态。

在 C++11 之前,为了实现类似的行为,我看到很多类定义了一个 Reset() 方法来重置其所有内部成员。但现在,我认为只需使用构造函数和析构函数并将 unique_ptr 重置为该类的新实例即可完成相同的任务。我是否遗漏了为什么您仍然喜欢 Reset() 方法的任何好处,或者我们应该始终只使用 unique_ptrreset > 每当我们想要“重置”我们的类时,它都会到一个新实例?

我能想到的唯一好处是您可以节省分配/删除,这有时可能会很昂贵。 当然,代价是维护 Reset() 函数并确保它与其他代码更改保持同步的复杂性。

是这样吗?这只是复杂性与性能问题?

最佳答案

这是一个非常好的通用方法,可以将类的状态重置为其默认构造状态:

// Previously constructed MyClass myvalue = ...
myvalue = MyClass{};

这涉及两个操作:

  1. 默认构造。
  2. 移 Action 业。

理想情况下,这两者都应该非常便宜。

关于c++ - std::unique_ptr 和 reset() 或您的类的 Reset 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507697/

相关文章:

c++ - 关于 C++ while 循环的语法混淆

c++ - 使用 CAtlRegExp 匹配多个组

c++ - 具有部分模板特化的 g++ 错误

c++ - 将可变参数模板模板参数专用于最小参数数量 : legal or not?

std::multimap 中的 c++ 枚举类

c# - TimerCallback.PerformTimerCallback 内存分配

c++ - 类类型重定义 C++

c++ - 在 CPU 上模拟 OpenGL 纹理映射以进行重投影

iphone - 自定义 UIView 在 [super dealloc] 上抛出 EXC_BAD_ACCESS

memory-management - Spark 读取大文件