草庐IT

auto_ptr_ref

全部标签

c++ - 使用 ref-qualifiers 重载解析模板方法

我正在使用特殊类型开发一个具有编译时访问功能的容器。我还希望有一个使用数字的访问函数,以便为所有元素实现操作。因此我有这样的东西:structS{templateint&f();templateint&f();};我想禁止访问临时对象,所以我为类型访问添加了一个重载:structS{templateint&f();templateint&f()&;templateint&f()&&=delete;};但是后来我遇到了msvc编译器的问题:(4):errorC2560:'int&Test::f(void)&':cannotoverloadamemberfunctionwithref-qu

c++ - `shared_ptr` 是如何实现协变的?

可以复制或构建shared_ptr来自shared_ptr(即shared_ptrptr=make_shared())。但众所周知,模板类不能相互转换,即使模板参数可以。那么如何才能shared_ptr检查它们的指针的值是否可转换,如果是则进行转换? 最佳答案 是的,默认情况下同一类模板的特化几乎没有关系,基本上被视为不相关的类型。但是您始终可以通过定义转换构造函数(To::To(constFrom&))和/或转换函数(From::operatorTo()const)来定义类类型之间的隐式转换。那又如何std::shared_ptr

c++ - 为什么 std::tr1::shared_ptr<>.reset() 如此昂贵?

分析一些大量使用shared_ptrs的代码,我发现reset()的开销出奇地大。例如:structTest{inti;Test(){this->i=0;}Test(inti){this->i=i;}};...autot=make_shared(1);...t.reset(somePointerToATestObject);跟踪最后一行中的reset()(在VC++2010下),我发现它创建了一个新的引用计数对象。有没有更便宜的方法,重用现有的引用计数并且不打扰堆? 最佳答案 在一般情况下,您不能重用现有的引用计数,因为可能有其他s

记录--源码视角,Vue3为什么推荐使用ref而不是reactive

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助ref 和 reactive 是Vue3中实现响应式数据的核心API。ref 用于包装基本数据类型,而reactive用于处理对象和数组。尽管 reactive 似乎更适合处理对象,但 Vue3官方文档更推荐使用 ref。 我的想法,ref就是比reactive好用,官方也是这么说的,不服来踩!下面我们从源码的角度详细讨论这两个API,以及Vue3为什么推荐使用ref而不是reactive?ref的内部工作原理ref 是一个函数,它接受一个内部值并返回一个响应式且可变的引用对象。这个引用对象有一个 .value 属性,该属性指向内部值

c++ 我可以将 std::unique_ptr 与依赖注入(inject)一起使用吗?

我一直在使用原始指针进行依赖注入(inject),因此我决定将我的代码转换为使用shared_ptr。这行得通,但我想知道我是否可以改用unique_ptr?在我下面的示例中,MyClass将管理信用卡服务的生命周期。classPaymentProcessor{PaymentProcessor(??creditCardService)::creditCardService_(creditCardService){}private:CreditCardService*creditCardService_;}classMyClass{public:voidDoIt(){creditCard

c++ - std::forward of rvalue ref to lambda?

考虑以下两个片段:附件A:templateintperform_calc(CalcFuncT&&calcfunc){precalc();intconstcalc=calcfunc();postcalc();returncalc;}intmain(){perform_calc([]{return5*foobar_x()+3;});//toFutureperform_calc([]{return5*foobar_y()-9;});//toPast}图表B:templateintperform_calc(CalcFuncT&&calcfunc){precalc();intconstcalc=

c++ - 使用 unique_ptr 离开范围时堆损坏

我遇到了类似于voidpointerreturnedfromfunctionheapcorruption的问题相似之处在于,当我离开使用unique_ptr的范围时,会收到“堆损坏”消息。这里是代码:voidCMyClass::SomeMethod(){std::unique_ptrspMyInterface;spMyInterface.reset(newCMyInterfaceObject());//CMyInterfaceObjectisderivedfromIMyInterfaceany_list.push_back(spMyInterface.get());//any_list

c++ - boost::python 函数调用中 boost::shared_ptr 的转换

考虑以下示例:#include"Python.h"#include#includeclassA{};classB:publicA{};voidfoo(boost::shared_ptr&aptr){}BOOST_PYTHON_MODULE(mypy){usingnamespaceboost::python;class_>("A",init());class_,bases>("B",init());def("foo",foo);}如果我调用python代码importmypyb=mypy.B()mypy.foo(b)我明白了ArgumentError:Pythonargumenttype

C++11:std ref 全局变量和非函数局部 thread_local 初始化顺序?

C++11中具有非平凡构造函数的全局变量是在静态初始化阶段在进入main之前构造的。同样,非函数局部thread_local变量是在每个线程的“thread_local初始化阶段”构建的。C++11标准是否规定了这些变量的构造顺序?在这两种情况下,如果有两个变量://globalscopeA::A(){b.f();}//AconstructorusesglobalbAa;Bb;C++11标准是否指定了它们应按什么顺序进行初始化,或者如果使用未初始化的变量应该产生错误?同样适用于非函数本地thread_local://globalscopeA::A(){b.f();}//Aconstru

c++ - 比较两组 std::weak_ptr

我正在尝试使用GCC4.7.2比较两组C++11weak_ptr。下面的代码显示了重现错误的最小可能样本:std::set,std::owner_less>>set1;std::set,std::owner_less>>set2;boolresult=(set1==set2);尝试编译以上内容会导致一长串错误,其中第一个实际错误如下:/usr/include/c++/4.7/bits/stl_algobase.h:791:6:error:nomatchfor‘operator==’in‘__first1.std::_Rb_tree_const_iterator::operator*>(