草庐IT

Make_shared

全部标签

c++ - 在销毁期间使用 std::shared_ptr 的 Segfault 可能是由于堆栈上的函数调用过多

以下代码编译运行良好:#includestructMyTree{std::shared_ptrleft;std::shared_ptrright;intval;MyTree(std::shared_ptrleft_,std::shared_ptrright_,intval_):left(left_),right(right_),val(val_){};};intmain(){std::shared_ptrt(newMyTree(std::shared_ptr(),std::shared_ptr(),0));for(inti=0;i但是,当for循环从10000更改为100000时,我收

c++ - 带有 enable_if : make default implementation 的部分模板函数特化

使用C++11的enable_if我想为一个函数定义几个专门的实现(例如,基于参数的类型)以及一个默认实现。正确的定义方式是什么?以下示例无法按预期工作,因为调用了“通用”实现,无论T类型如何。#includetemplatevoiddummy(Tt){std::cout::value>::type>voiddummy(Tt){std::cout::value>::type>voiddummy(Tt){std::cout我的最小示例中的一个解决方案是使用明确声明“通用”实现不适用于整数或浮点类型std::enable_if::value&&!std::is_floating_point

c++ - 带有 enable_if : make default implementation 的部分模板函数特化

使用C++11的enable_if我想为一个函数定义几个专门的实现(例如,基于参数的类型)以及一个默认实现。正确的定义方式是什么?以下示例无法按预期工作,因为调用了“通用”实现,无论T类型如何。#includetemplatevoiddummy(Tt){std::cout::value>::type>voiddummy(Tt){std::cout::value>::type>voiddummy(Tt){std::cout我的最小示例中的一个解决方案是使用明确声明“通用”实现不适用于整数或浮点类型std::enable_if::value&&!std::is_floating_point

c++ - 显式删除 shared_ptr

这里有一个简单的问题:是否允许您自己显式删除boost::shared_ptr?你应该过吗?澄清一下,我不是说删除shared_ptr持有的指针。我的意思是实际的shared_ptr本身。我知道大多数人建议不要这样做,所以我只是想知道是否可以明确地这样做。 最佳答案 你的问题不清楚。如果您已经动态分配了shared_ptr,那么您当然可以随时delete它。但是,如果您要问是否允许删除shared_ptr管理的任何对象,那么答案是……这取决于。如果shared_ptr::unique返回true,则调用shared_ptr::res

c++ - 显式删除 shared_ptr

这里有一个简单的问题:是否允许您自己显式删除boost::shared_ptr?你应该过吗?澄清一下,我不是说删除shared_ptr持有的指针。我的意思是实际的shared_ptr本身。我知道大多数人建议不要这样做,所以我只是想知道是否可以明确地这样做。 最佳答案 你的问题不清楚。如果您已经动态分配了shared_ptr,那么您当然可以随时delete它。但是,如果您要问是否允许删除shared_ptr管理的任何对象,那么答案是……这取决于。如果shared_ptr::unique返回true,则调用shared_ptr::res

C++ std::shared_ptr 用法和信息

我正在尝试使用std::shared_ptr在我的代码中。我已经看到关于这个主题还有其他问题,但我仍然遇到编译器错误。我有正确版本的gcc和设置吗?我做了什么:我曾尝试分别使用两个头文件编译我的代码—和但在这两种情况下仍然会出现以下错误。我使用的gcc版本是gcc--versiongcc(GCC)4.3.2当我包含时我使用的标题std::shared_ptr和我使用的标题std::tr1::shared_ptr?这是正确的吗?我已将shared_ptr设置如下:std::shared_ptrptr_A=shared_ptr(newA());我得到的错误如下:src/WH.cxx:156

C++ std::shared_ptr 用法和信息

我正在尝试使用std::shared_ptr在我的代码中。我已经看到关于这个主题还有其他问题,但我仍然遇到编译器错误。我有正确版本的gcc和设置吗?我做了什么:我曾尝试分别使用两个头文件编译我的代码—和但在这两种情况下仍然会出现以下错误。我使用的gcc版本是gcc--versiongcc(GCC)4.3.2当我包含时我使用的标题std::shared_ptr和我使用的标题std::tr1::shared_ptr?这是正确的吗?我已将shared_ptr设置如下:std::shared_ptrptr_A=shared_ptr(newA());我得到的错误如下:src/WH.cxx:156

c++ - 使用 std::make_tuple 时如何避免构造函数的未定义执行顺序

如果构造函数的执行顺序很重要,我该如何使用std::make_tuple?比如我猜A类的构造函数和B类的构造函数的执行顺序是未定义的:std::tuplet(std::make_tuple(A(std::cin),B(std::cin)));我在阅读了对该问题的评论后得出了这个结论Translatingastd::tupleintoatemplateparameterpack这就是说这个templatestd::tupleparse(std::istream&stream){returnstd::make_tuple(args(stream)...);}实现具有未定义的构造函数执行顺序

c++ - 使用 std::make_tuple 时如何避免构造函数的未定义执行顺序

如果构造函数的执行顺序很重要,我该如何使用std::make_tuple?比如我猜A类的构造函数和B类的构造函数的执行顺序是未定义的:std::tuplet(std::make_tuple(A(std::cin),B(std::cin)));我在阅读了对该问题的评论后得出了这个结论Translatingastd::tupleintoatemplateparameterpack这就是说这个templatestd::tupleparse(std::istream&stream){returnstd::make_tuple(args(stream)...);}实现具有未定义的构造函数执行顺序

c++ - 返回 shared_ptr 时如何实现协变返回类型?

usingnamespaceboost;classA{};classB:publicA{};classX{virtualshared_ptrfoo();};classY:publicX{virtualshared_ptrfoo();};返回类型不是协变的(因此它们也不是合法的),但如果我使用原始指针代替它们就会是。解决此问题的常用习语是什么(如果有的话)? 最佳答案 我认为解决方案基本上是不可能的,因为协方差取决于与智能指针不兼容的指针算法。当Y::foo返回shared_ptr对于动态调用者,它必须转换为shared_ptr使用前