草庐IT

LONG_PTR

全部标签

c++ - const boost::shared_ptr<T>& 作为函数参数的目的?

我正在使用某个大型且维护良好的开源C++库,并遇到了一个具有以下形式的构造函数的类定义classSomeClass{SomeClass(constboost::shared_ptr&);}我的问题是:传递constboost::shared_ptr有什么意义?引用?传递boost::shared_ptr是否真的存在不可忽略的开销?按值(value)计算,或者传递boost::shared_ptr是否存在其他危险?按我不知道的值(value)? 最佳答案 按值传递将复制它,这会导致引用计数增加,并在所有线程之间同步。绝对不可忽略。

c++ - 单元测试、模拟和 unique_ptr

有一个正在测试的类目前接受unique_ptr&&在它的构造函数中,表示它想要获得接口(interface)实现的单一所有权。想要使用模拟Interface测试此类时会出现问题虽然:模拟框架(HippoMocks)只给我Interface*我不拥有,因此无法删除。我以前在测试constshared_ptr&的类(class)时遇到过同样的问题作为参数,但通过提供自定义的无操作删除器来修复:templatevoidNoDelete(T*){}//createashared_ptrwithouteffectivedeletertemplatestd::shared_ptrmock_shar

c++ - Qt raw 与 std::shared_ptr

我注意到当在QT中用shared_ptr替换原始指针时,我的代码不再起作用。例如,如果不是QTreeWidgetItem*vItem(newQTreeWidgetItem(ItemTitle));我用std::shared_ptrvItem(newQTreeWidgetItem(ItemTitle));然后,要么程序崩溃,要么什么都没做(即使我使用.get()函数来获取来self代码后面共享的原始指针)。有谁知道可能是什么原因? 最佳答案 对Qt模型项使用共享指针会导致所有权冲突:QTreeWidget获取您传递给它的任何QTree

c++ - 如果我尝试在 C++ 中将大于 pow(2,64)-1 的值分配给 unsigned long long 会怎样?

如果我有两个unsignedlonglong值,比如pow(10,18)和pow(10,19),我将它们相乘并将输出存储在另一个unsignedlonglong类型的变量中……我们得到的值是显然不是答案,但它有任何逻辑吗?每次我们尝试使用任意大的数字时,我们都会得到一个垃圾类型的值,但是输出与输入值有任何逻辑吗? 最佳答案 C++中的无符号整数类型遵循模运算规则,即它们表示对2N取模的整数,其中N是数字整数类型的值位(可能小于其sizeof倍CHAR_BIT);具体来说,该类型包含值[0,2N)。因此,当您将两个数字相乘时,结果是数

c++ - 通过引用传递与通过 shared_ptr 传递

Stackoverflow上的大多数问题都是关于shared_ptr应该按ref还是按值传递。但是我的问题是这样的例子:classFoo;voidfunction1(Foo&ff){ff.m_abc=1024;}voidfunction2(conststd::shared_ptr&ff){ff->m_abc=1024;}function1和function2可能会使用和更改ff的某些部分。我的案例:我需要调用带有参数*this或shared_from_this()的函数。print(msg,*this);orprint(msg,this->shared_from_this());我可以

c++ - std::unique_ptr 和指向指针的指针

我想结合使用std::unique_ptr和FreeImage的FITAG。普通C中的代码将是:...loadimage;FITAG*tag=NULL;FreeImage_GetMetadata(FIMD_EXIF_EXIF,bitmap,"Property",&tag);...dosomestuffwithtag;FreeImage_DeleteTag(tag);...deleteimage;我对unique_ptr的尝试:std::unique_ptrtag(NULL,&FreeImage_DeleteTag);FreeImage_GetMetadata(FIMD_EXIF_EXI

c++ - 一个简单的 std::shared_ptr 构造案例的段错误

来自cppreference我了解到std::shared_ptr有一个构造函数:templateexplicitshared_ptr(Y*ptr);然后我试了一段代码如下:#include#include#includeintmain(void){///block1{std::shared_ptrs1(newstd::string("good"));std::shared_ptrs2(s1.get());///s2std::cerri1(newint(1));std::shared_ptri2(i1.get());///i2std::cerr它会导致block1的段错误,但不会导致b

c++ - 放置指向 shared_ptr 的多重映射的指针不起作用

vector工作正常Headerstd::vector>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p){subnodes_m.emplace_back(subnode_p);}multimap没有Headerstd::multimap>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p,unsignedintlayerIndex){subnodes_m.emplace(layerIndex,

c++ - 当shared_ptr,当unique_ptr

这个问题在这里已经有了答案:Differencesbetweenunique_ptrandshared_ptr[duplicate](4个答案)关闭7年前。什么时候应该使用shared_ptr什么时候使用unique_ptr?例如在这个类中而不是node*应该是shared_ptr或unique_ptr。它取决于什么?classnode{private:node*parent;vectorchildren;/**txny*x-numerdrzewa*y-numerwezla*/stringid;typeNodetype;//0-term,1-funcpublic:node(node*p

c++ weak_ptr在取消引用后过期?

我是智能指针的新手,我正在思考为什么weak_ptr在取消引用运算符后会过期。我用来测试的代码在这里:#include#include#includeusingnamespacestd;structnode{weak_ptrparent;shared_ptrchild;intval;};shared_ptrfoo(){shared_ptra=make_shared();shared_ptrb=make_shared();a->val=30;b->val=20;b->parent=a;a->child=b;returna;}intmain(){shared_ptrc=foo();node