草庐IT

shared_int

全部标签

c++ - 有什么方法可以欺骗 std::make_shared 使用默认初始化吗?

您应该使用std::make_shared确保带有计数器的block存储在数据旁边。不幸的是内部std::make_shared对T使用零初始化(即使用T()来初始化数据block)。有什么办法可以让它使用默认初始化吗?我知道我可以使用std::shared_ptr(newT,[](autop){deletep;}),但我最终会在这里进行两次分配(数据和计数器block不会彼此相邻)。 最佳答案 创建一个派生类来执行简单的构造。structD:T{D(){}//Non-trivialconstructor.Default-initi

c++ - 在 C/C++ 中从 int 获取单个数字以进行基数排序的最佳方法

从具有n个数字的int中获取单个数字以用于基数排序算法的最佳方法是什么?我想知道在C/C++中是否有特别好的方法,如果没有,一般的最佳解决方案是什么?编辑:澄清一下,我正在寻找一种解决方案,而不是将其转换为字符串并将其视为数字数组。 最佳答案 使用大小为2^k的数字。要提取第n个数字:#defineBASE(2>(n*k))&MASK;}使用移位和掩码(由基数为2的幂启用)避免昂贵的整数除法指令。之后,选择最佳基础是一个实验性问题(针对您的特定硬件进行时间/空间权衡)。可能k==3(base8)效果很好并且限制了buckets的数量

c++ - 如何将 QMap<QString, QMap<QString, int>> 转换为 QVariant?

QVariant(需要QSettings类)支持从QMap创建但是尝试初始化这样的东西:QMap)>i;给出错误:functionreturningafunction.然后我尝试了QMapQVariant()过载得到了error:nomatchingfunctionforcalltoQVariant::QVariant(QMap>&)现在我尝试了一个类型转换:QMap>i;得到了templateargument2isinvalidinvalidtypeindeclarationbefore';'token那么转换嵌套QMap所需的巫术是什么?到QVariant对象?

c# - 将 shared_ptr 与托管语言引用进行比较

有人可以向C++程序员解释Java(以及C#)引用和shared_ptr(来自Boost或C++0x)之间最重要的区别。我或多或少知道shared_ptr是如何实现的。我很好奇以下方面的差异:1)性能。2)骑自行车。shared_ptr可以循环(A和B持有指向彼此的指针)。在Java中可以骑自行车吗?3)还有什么吗?谢谢。 最佳答案 性能:shared_ptr性能不错,但根据我的经验,它的效率略低于显式内存管理,主要是因为它是引用计数的,并且必须分配引用计数以及。它的性能如何取决于很多因素,它与Java/C#垃圾收集器相比的性能如何

c++ - 无法将 INT_MIN 的值分配给 long long

signedlonglongvalue=-2147483648;cout输出2147483648(没有减号),为什么? 最佳答案 signedlonglongvalue=-2147483648;2147483648无法用32位有符号整数表示,因此将其转换为无符号整数,然后应用一元减号(不会更改任何内容),然后将其分配给签名长长。使用-2147483648LL 关于c++-无法将INT_MIN的值分配给longlong,我们在StackOverflow上找到一个类似的问题:

c++ - 我应该在使用之前检查 boost::shared_ptr 或 std::shared_ptr 吗?

voidf(boost::shared_ptrptr){if(ptr)//shouldwecheck?//dosomething}voidf2(int*p){if(p)//goodpracticetocheckbeforeusingit//dosomething}问题:我们是否应该在使用前验证shared_ptr? 最佳答案 没有。如果在函数的约定中它必须是有效的,那么引起人们注意调用者有错误这一事实的最快方法就是崩溃。尽早失败。 关于c++-我应该在使用之前检查boost::share

c++ - 旧版本的 C++ 在评估 `int` 语句中的条件时是否使用了类的 `if()` 运算符?

现代版本的C++在评估if()语句中的条件时尝试使用类的bool运算符。其他转换运算符,例如int在不存在bool运算符时使用。如下所示。#includeusingnamespacestd;classTwoInts{public:inta,b;operatorbool(){cout运行这段代码不会产生任何意外:TwoIntstoboolSixIntstoint查看一些旧的C++代码,似乎有一个更改需要验证。旧版本的C++在评估if()语句中的条件时是否使用了类的int运算符?什么版本(如果有)做过某事?那么建议的输出应该是TwoIntstointSixIntstoint关于问题原因的一

C++从istream读取int,检测溢出

如果我使用>>运算符从istream中读取一个整数,并且表示的整数大于INT_MAX,则该操作只返回INT_MAX。我目前正在与INT_MAX进行比较以检测溢出,但如果输入操作“2147483647”,那么它会返回一个错误,而实际上没有错误,结果是有效的。例子:http://ideone.com/4bXyGd#include#include#includeintmain(){std::istringstreamst("1234567890123");//Trywith2147483647intresult;st>>result;if(result==INT_MAX)std::cout在

c++ - 为什么 implicit == on map<<int,MyClass> 不编译?

我在为我的一个类(class)定义==时遇到了一个奇怪的问题。我将此处的代码简化为我在visual2013上测试过的示例;MyClass在命名空间N中定义这确实编译:N::MyClassa,b;booltest=a==b;这也是:constN::MyClassa,b;booltest=a==b;这不编译std::mapa,b;booltest=a==b;供您引用,=​​=运算符声明如下:booloperator==(constN::MyClass&a,constN::MyClass&b);这是我得到的错误:errorC2678:binary'==':nooperatorfoundwhi

c++ - 多态性和 shared_ptr 成员

测试多态性&虚函数&shared_ptr,我试图理解以下最小示例描述的情况。classB{public://DefinitionofclassBvirtualvoidsomeBMethod(){//Makeaburger};};classC:publicB{public://DefinitionofclassCvoidsomeBMethod(){//Makeapizza};};classA{public:A(B&SomeB):Member(std::make_shared(SomeB)){};std::shared_ptrMember;};现在,我们基本上可以拥有intmain(){C