c++ - 将 make_shared 与不完整的类型一起使用

标签 c++ stl shared-ptr incomplete-type make-shared

我正在尝试将我的代码切换为使用 make_shared<type>()但是我有很多不完整的类型(在创建时是完整的)并且想知道是否有 make_shared 可以处理不完整的类型或者允许我传递删除类型。

我环顾四周,没有找到任何与此相关的帖子,所以要么这行得通??或者我忽略了一些基本的东西。

#define NEW_PARAMS(Type, ...)   ::std::shared_ptr<Type>(new (Type)(__VA_ARGS__), ::std::default_delete<Type>())

上面是我用来创建新对象的宏。想将其转换为

#define NEW_PARAMS(Type, ...)   ::std::make_shared<Type>(__VA_ARGS__, ::std::default_delete<Type>())

编辑: 只是为了澄清,我想问问我是否可以将删除器类型传递给 shared_ptr使用 make_shared 创建

最佳答案

不,make_shared 不能将删除器对象传递给它创建的 shared_ptr。通常,您不需要这样做。由于它使用 new(特别是放置 new)来创建指针,因此需要通过调用析构函数来删除它。所以您无能为力,因为 make_shared 直接管理内存。

关于c++ - 将 make_shared 与不完整的类型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873783/

相关文章:

c++ - 我如何在 Qt 中从 Internet 下载文件?

c++ - 单例模式实现错误

scope - C++ 的 shared_ptr 在 Rust 中的等价物是什么?

c++ - 我应该使用 boost::ptr_vector<T> 还是 vector<boost::shared_ptr<T>>?

c++如何使两个 vector 一个带有数据另一个指向并且只读

c++ - enable_shared_from_this 需要什么?

c++ - 什么是未知大小的 make_shared?

c++ - GL_LIGHT 只创建一个光源

c++ - 为什么 cv::Mat::data 总是指向一个 uchar?

c++ - 无法理解我的程序的输出