草庐IT

together_unique

全部标签

c++ - 关于销毁策略的 unique_ptr<> v shared_ptr<>

我一直在自学C++0x中的智能指针,但我遇到了一些让我感觉不一致的东西。具体来说,unique_ptr和shared_ptr的销毁策略是如何处理的。对于unique_ptr,您可以专门化std::default_delete,从那时起,除非您明确请求不同的销毁策略,否则将使用新的默认值。考虑以下几点:structsome_c_type;some_c_type*construct_some_c_type();voiddestruct_some_c_type(some_c_type*);namespacestd{templatestructdefault_delete{voidoperat

c++ - 关于销毁策略的 unique_ptr<> v shared_ptr<>

我一直在自学C++0x中的智能指针,但我遇到了一些让我感觉不一致的东西。具体来说,unique_ptr和shared_ptr的销毁策略是如何处理的。对于unique_ptr,您可以专门化std::default_delete,从那时起,除非您明确请求不同的销毁策略,否则将使用新的默认值。考虑以下几点:structsome_c_type;some_c_type*construct_some_c_type();voiddestruct_some_c_type(some_c_type*);namespacestd{templatestructdefault_delete{voidoperat

c++ - 从函数返回一个 unique_ptr vector

我目前正在阅读《HeadFirstObjectOrientedAnalysisandDesign》一书,同时也习惯了C++11的一些特性(尤其是unique_ptr和move语义)。在书中,他们以策略棋盘游戏的设计为例。它有一个板,瓷砖和瓷砖上的单位。代码是用Java编写的,我试图用C++重写它。在Java中,tile类如下:publicclassTile{privateListunits;publicTile(){units=newLinkedList();}protectedvoidaddUnit(Unitunit){units.add(unit);}protectedListge

c++ - 从函数返回一个 unique_ptr vector

我目前正在阅读《HeadFirstObjectOrientedAnalysisandDesign》一书,同时也习惯了C++11的一些特性(尤其是unique_ptr和move语义)。在书中,他们以策略棋盘游戏的设计为例。它有一个板,瓷砖和瓷砖上的单位。代码是用Java编写的,我试图用C++重写它。在Java中,tile类如下:publicclassTile{privateListunits;publicTile(){units=newLinkedList();}protectedvoidaddUnit(Unitunit){units.add(unit);}protectedListge

c++ - 为什么要为具有非平凡析构函数的类声明 constrexpr 构造函数(例如 unique_ptr、std::variant)

据我了解(至少对于c++14而言),析构函数不能是constexpr如果它不是微不足道的(隐式生成或=default)。声明constexpr有什么意义?具有非平凡析构函数的结构的构造函数?structX{inta_;constexprX(inta):a_{a}{}//constexpr~X(){};//Errordtorcannotbemarkedconstexpr//~X(){};//causeserroratydeclaration:temporaryofnon-literaltype‘X’//inaconstantexpression.};templatestructY{};i

c++ - 为什么要为具有非平凡析构函数的类声明 constrexpr 构造函数(例如 unique_ptr、std::variant)

据我了解(至少对于c++14而言),析构函数不能是constexpr如果它不是微不足道的(隐式生成或=default)。声明constexpr有什么意义?具有非平凡析构函数的结构的构造函数?structX{inta_;constexprX(inta):a_{a}{}//constexpr~X(){};//Errordtorcannotbemarkedconstexpr//~X(){};//causeserroratydeclaration:temporaryofnon-literaltype‘X’//inaconstantexpression.};templatestructY{};i

c++ - 如何正确返回 unique_ptr 的集合

在更改我的代码以使用唯一指针后,我偶然发现了如何将对象集合返回给客户端。一般来说,我想将对象作为引用或非拥有指针传递。但如果我有一个对象集合,我不能只返回对它的引用。例如,我有一个包含对象集合的简单类,这些对象都创建一次,之后不会更改。usingObjectUPtr=std::unique_ptr;classMyClass{public:conststd::vector&GetObjectsOldStyle()const{returnmObjectsOldStyle;}conststd::vector&GetObjectsNewStyleA()const{//Idon'tliketha

c++ - 如何正确返回 unique_ptr 的集合

在更改我的代码以使用唯一指针后,我偶然发现了如何将对象集合返回给客户端。一般来说,我想将对象作为引用或非拥有指针传递。但如果我有一个对象集合,我不能只返回对它的引用。例如,我有一个包含对象集合的简单类,这些对象都创建一次,之后不会更改。usingObjectUPtr=std::unique_ptr;classMyClass{public:conststd::vector&GetObjectsOldStyle()const{returnmObjectsOldStyle;}conststd::vector&GetObjectsNewStyleA()const{//Idon'tliketha

c++ - 将 unique_ptr 添加到 vector 中的类会导致 3 倍 boost

背景我有一个大图(100k个节点),其中每个节点必须为每个出边存储一些信息。而不是将其保存在std::vector中,我正在使用dynamic_bitset从Boost1.58开始,可以执行按位运算。每个节点还保留一个指向某个多态对象的指针。一个最小的例子看起来像这样,structNode{std::vectorsucc;boost::dynamic_bitsetsucc_flags;std::unique_ptrdata;};问题考虑这个简单的基准程序,它创建和销毁一个图:#include#include#includeconstexprintN=50000;structNode{s

c++ - 将 unique_ptr 添加到 vector 中的类会导致 3 倍 boost

背景我有一个大图(100k个节点),其中每个节点必须为每个出边存储一些信息。而不是将其保存在std::vector中,我正在使用dynamic_bitset从Boost1.58开始,可以执行按位运算。每个节点还保留一个指向某个多态对象的指针。一个最小的例子看起来像这样,structNode{std::vectorsucc;boost::dynamic_bitsetsucc_flags;std::unique_ptrdata;};问题考虑这个简单的基准程序,它创建和销毁一个图:#include#include#includeconstexprintN=50000;structNode{s