草庐IT

Unique_ptr

全部标签

c++ - 使用 T[] 作为模板参数

我最近偶然发现了unique_ptr的用法,据我所知,目的是用delete[]删除指针.令我困惑的是unique_ptr相反无效(如果我错了,请纠正我)。模板中T[]的类型是什么?它与T[3]有何不同?这些是数组,所以它们不应该相同吗?T[]作为模板中的类型还有其他用途吗? 最佳答案 T[]是一种类型。它是“T的未知边界数组”类型。它是一个不完整的类型。T[3]也是一种类型。它的类型是“3个数组T”。它与T[]的类型不同,就像int和double是不同的类型。default_delete模板部分专门用于T[]形式的不完整数组.但是,

c++ - Valgrind 在 std::make_unique 中显示内存泄漏

我正在使用Valgrind检查内存泄漏。不幸的是,我收到了Leak_DefinitelyLost警告。附件是我的代码的简化版本,它重现了错误:#include#include#include#includeusingnamespacestd;classBase{public:explicitBase(doublea){a_=a;}virtualvoidfun()=0;protected:doublea_;};classDerived_A:publicBase{public:Derived_A(doublea,vectorb,vectorc):Base(a),b_{b},c_{c}{}v

c++ - Valgrind 在 std::make_unique 中显示内存泄漏

我正在使用Valgrind检查内存泄漏。不幸的是,我收到了Leak_DefinitelyLost警告。附件是我的代码的简化版本,它重现了错误:#include#include#include#includeusingnamespacestd;classBase{public:explicitBase(doublea){a_=a;}virtualvoidfun()=0;protected:doublea_;};classDerived_A:publicBase{public:Derived_A(doublea,vectorb,vectorc):Base(a),b_{b},c_{c}{}v

c++ - shared_ptr 与非指针资源

在C++11中是否可以使用shared_ptr来控制非指针资源?可以使用unique_ptr来管理非指针资源。这是通过实现一个自定义删除器类来完成的,该类提供:一个typedef{TYPE}指针;其中{TYPE}是非指针资源类型operator()(pointer)释放受控资源...然后使用自定义删除器作为第二个模板参数实例化一个unique_ptr。例如,在Windows下,可以创建一个unique_ptr来管理servicecontrolhandle.这个句柄类型不是通过调用delete来释放的,而是通过调用CloseServiceHandle()来释放的。.这是执行此操作的示例代

c++ - shared_ptr 与非指针资源

在C++11中是否可以使用shared_ptr来控制非指针资源?可以使用unique_ptr来管理非指针资源。这是通过实现一个自定义删除器类来完成的,该类提供:一个typedef{TYPE}指针;其中{TYPE}是非指针资源类型operator()(pointer)释放受控资源...然后使用自定义删除器作为第二个模板参数实例化一个unique_ptr。例如,在Windows下,可以创建一个unique_ptr来管理servicecontrolhandle.这个句柄类型不是通过调用delete来释放的,而是通过调用CloseServiceHandle()来释放的。.这是执行此操作的示例代

c++ - 了解复制初始化和隐式转换

我无法理解为什么以下复制初始化无法编译:#includestructbase{};structderived:base{};structtest{test(std::unique_ptr){}};intmain(){autopd=std::make_unique();//testt(std::move(pd));//thisworks;testt=std::move(pd);//thisdoesn't}一个unique_ptr可以移动到unique_ptr,那么为什么第二个语句有效,而最后一个语句无效?执行复制初始化时是否不考虑非显式构造函数?来自gcc-8.2.0的错误是:conve

c++ - 了解复制初始化和隐式转换

我无法理解为什么以下复制初始化无法编译:#includestructbase{};structderived:base{};structtest{test(std::unique_ptr){}};intmain(){autopd=std::make_unique();//testt(std::move(pd));//thisworks;testt=std::move(pd);//thisdoesn't}一个unique_ptr可以移动到unique_ptr,那么为什么第二个语句有效,而最后一个语句无效?执行复制初始化时是否不考虑非显式构造函数?来自gcc-8.2.0的错误是:conve

c++ - 使用 std::vector< std::shared_ptr<const T>> 是反模式吗?

很长一段时间我都在使用std::vector和std::shared_ptr手牵手。最近开始使用std::shared_ptr每当需要指向const对象的指针时。没关系,因为std::shared_ptr可以转换为std::shared_ptr然后他们共享相同的引用计数器,一切都感觉很自然。但是当我尝试使用std::vector>等结构时我遇到了麻烦。为简化起见,我将表示这两种结构:templateusingSharedPtrVector=std::vector>;templateusingSharedConstPtrVector=std::vector>;问题是虽然SharedPtr

c++ - 使用 std::vector< std::shared_ptr<const T>> 是反模式吗?

很长一段时间我都在使用std::vector和std::shared_ptr手牵手。最近开始使用std::shared_ptr每当需要指向const对象的指针时。没关系,因为std::shared_ptr可以转换为std::shared_ptr然后他们共享相同的引用计数器,一切都感觉很自然。但是当我尝试使用std::vector>等结构时我遇到了麻烦。为简化起见,我将表示这两种结构:templateusingSharedPtrVector=std::vector>;templateusingSharedConstPtrVector=std::vector>;问题是虽然SharedPtr

c++ - 带 malloc 和 free 的 shared_ptr

我在包含c和cpp的大型应用程序中工作。所有文件都保存为cpp扩展名,但代码是用c-style编写的。我的意思是它是定义结构而不是通过malloc和realloc和calloc分配内存的类。最近他们已经安装了boost库所以我打算在我现有的代码库中使用所以我有一些以下问题。我可以将std::shared_ptr与malloc和free一起使用吗?如果是,谁能指出我的示例代码库?如果我在我的应用程序中创建std::shared_ptr并将此指针传递给另一个使用malloc或calloc的函数,它会影响任何功能吗?或者换句话说:对于以下代码,如何使用std::shared_ptr实现类似的