草庐IT

STLport_shared

全部标签

c++ - 将 googlemock EXPECT_CALL 与 shared_ptr 一起使用?

我有一个测试可以很好地使用原始指针,但我无法让它与std::shared_ptr一起工作。类是这样的:classMyClass{MyClass(SomeService*service);voidDoIt();}我的测试代码是这样的:classMyClassTests:public::testing::Test{public:MyClassTests():myClass_(newMyClass(&service_)){}protected:SomeServiceFakeservice_;MyClassSharedPointermyClass_;};TEST_F(MyClassTests,

c++ - 在 shared_ptr 容器中查找元素?

我在查找shared_ptrvector中的元素时遇到了一点问题。这是我最终得到的结果:std::vector>blocks;boolcontains(Block*block){for(autoi=blocks.begin();i!=blocks.end();++i){if((*i).get()==block){returntrue;}}returnfalse;}但是,我没能用std::find甚至std::find_if做到这一点。是否有更符合C++标准的方法来实现这一目标?编辑:这是我在回答之后的代码:boolcontains(Block*block){autofound=std:

c++ - shared_ptr 析构函数、复制和不完整类型

我有一个头文件foo.h像这样(省略不相关的东西):#pragmaonce#includeclassBar;structFoo{std::shared_ptrgetBar();std::shared_ptrgetBar()const{returnconst_cast(this)->getBar();}};getBar()的非常量重载在.cpp文件中实现,该文件还可以看到Bar的完整定义.当foo.h包含在另一个文件中(没有看到Bar的定义),VS2010给我这样的警告:warningC4150:deletionofpointertoincompletetype'Bar';nodestr

c++ - Make_shared - 自己的实现

我正在尝试自己实现shared_ptr。make_shared有问题。std::make_shared的主要特点是它在连续的内存块中分配计数器block和对象。我怎样才能做同样的事情?我试过这样做:templateclassshared_ptr{private:class_ref_cntr{private:longcounter;public:_ref_cntr():counter(1){}voidinc(){++counter;}voiddec(){if(counter==0){throwstd::logic_error("alreadyzero");}--counter;}long

c++ - 尝试执行 shared_ptr swap() 时出现奇怪错误

我是一个相对的C++新手,试图将一个现有项目从原始指针转换为使用C++11的shared_ptr.总的来说进展非常顺利,我认为我理解如何shared_ptr在移动语义、右值引用等方面工作。好东西。但是,我遇到了一个奇怪的错误,我不明白也不知道如何修复。先介绍一点背景。我有一个根植于名为EidosValue的抽象基类的类层次结构,和一个名为EidosValue_Int_vector的类是(间接地)一个具体的子类:classEidosValueclassEidosValue_Int:publicEidosValueclassEidosValue_Int_vector:publicEidos

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# - 将 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++ - 我应该在使用之前检查 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++ - 多态性和 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

c++ - 访问 shared_ptr 数组

#includeintmain(){std::shared_ptrarray(newdouble[256],[](double*d){delete[]d;});}我制作了一个shared_ptr指向一个double组,它有自己的自定义删除器。现在如何访问数组?假设我希望访问索引为1的数组。我尝试了通常的“括号方法”,但出现错误。单词array默认指向它的第一个元素,但是如果我想访问第二个元素怎么办?使用增量和括号给我“不匹配运算符”错误。有人可以向我解释幕后发生的事情吗?我问这个是为了研究目的,尽管我知道unique_ptr和vector会做得更好。 最佳答