c++ - unique_ptr 两次调用析构函数
问题描述
我有一个代码块,我正在使用unique_ptr
.
class Abc {
public:
std::string msg;
Abc(std::string m) {
msg = m;
std::cout << "Constructor: " << msg << std::endl;
}
~Abc() {
std::cout << "Destructor: " << msg << std::endl;
}
};
int main() {
auto p = std::make_unique<Abc>(Abc(__func__));
}
但是析构函数被调用了两次。有没有办法让它只调用一次析构函数?
解决方案
您首先构造一个临时Abc
(即Abc(__func__)
),然后将其传递给std::make_unique
,它从临时构造底层Abc
(通过 的移动构造函数Abc
);即Abc
构造了两个对象,然后也调用了两次析构函数。
可以直接传递__func__
给std::make_unique
,即不需要Abc
从头构造临时的。
auto p = std::make_unique<Abc>(__func__); // constructs Abc via Abc::Abc(std::string) directly
推荐阅读
- c# - 用 LINQ 查询中的 Where 替换 OrderBy
- elasticsearch - 在弹性搜索中使用 AND 和 OR 在不同字段上匹配文档
- python - 使用 Matplotlib 格式化绘图
- javascript - 在 JavaScript 中获取 MDI(物化设计图标)图像
- docker - 如何在 GCP 的 pod 中找到 kafka 的目录?
- android - Android 中带有自定义 RecyclerView 的 InflateException
- javascript - 没有在firebase中获得令牌
- javascript - 为什么高度不是由javascript设置的?
- android - 使用 livedata 进行 Android 视图模型单元测试
- symfony - 路由 symfony 中的多个可选参数