草庐IT

auto_ptr_ref

全部标签

c++ - shared_ptr 的缺点

通过c++11中包含的shared_ptr,可以实现半垃圾收集环境。这种(通货膨胀?)用法是否会带来一些缺点?我可以想象一个类模型,您可以在其中创建一个类,在该类的末尾将您的类定义为shared_ptr以简化语法。/////////////////////MyClass/////////////////////#includeclassMyClass{public:Myclass();};typedefstd::shared_ptrSharedMyClass;///////////////////////////ExampleClass/////////////////////////

c++ - eclipse 火星 : Symbol 'unique_ptr' could not be resolved

使用EclipseMars,我遇到了Symbol'unique_ptr'couldnotberesolved错误。我尝试将-std=c++11添加到CDTGCC内置编译器设置,但这没有帮助。当我重新打开Eclipse时错误消失了,但是如果我修改代码,错误又回来了。一个简单的代码示例:std::unique_ptrp1; 最佳答案 在EclipseMars中打开Window>Preferences>C/C++>Build>Settings>Discovery>CDTGCCBuild-inCompilerSettings将-std=c+

c++ - 为什么 "error: invalid application of ' sizeof' 为使用 unique_ptr 的不完整类型”通过添加空析构函数来修复?

这个问题在这里已经有了答案:Isstd::unique_ptrrequiredtoknowthefulldefinitionofT?(9个回答)关闭7年前。我在类里面拉皮条STFT.在header中用这个编译就好了:classSTFT;//pimplofftopreventpointnameclashclassWhatever{private:STFT*stft;这在实现中:#include"STFT.h"Whatever::Whatever():stft(newSTFT()){//blahblah}Whatever::~Whatever(){deletestft;//pureevil

c++ - 我应该使用 QScopedPointer 还是 std::unique_ptr?

我正在开始一个新项目,使用Qt5和QMAKE_CXXFLAGS+=-std=c++1y。我不确定我应该更喜欢QScopedPointer还是std::unique_ptr。我读了somewhereQScopedPointer不再那么酷了。QScopedPointer是否有unique_ptr缺少的功能?在替换QScopedPointer时,是否有任何我不想使用的unique_ptr功能?还是相反? 最佳答案 QScopedPointer严格弱于unique_ptr因为它不支持移动语义。它的功能在其他方面非常相似。移动语义非常有用,不

c++ - 传递给方法时,我应该将 shared_ptr 转换为 weak_ptr 吗?

关于这个主题已经有几个问题,但我仍然不确定该怎么做:我们的代码库在很多地方使用shared_ptr。不得不承认,我们在写的时候并没有明确定义所有权。我们有一些方法,比如voiddoSomething(shared_ptrptr){//doSomething()isamemberfunctionofaclass,butusuallywon'tstoretheptrptr->foo();...}在发现第一个(间接的)循环依赖后,我想纠正我们设计中的错误。但我不确定如何。将上面的方法更改为有什么好处吗?voiddoSomething(weak_ptrptr){shared_ptrptrSha

c++ - 在一组 shared_ptr 中找到一个值

我有一组shared_ptr并想在其中找到一个值:typedefstd::shared_ptrIntPtr;structCompare{booloperator()(constIntPtr&a,constIntPtr&b){return*as;autox=std::make_shared(3);s.insert(x);boolfound=s.find(std::make_shared(3))!=s.end();它可以工作,但效率不高-每次尝试查找值时都需要新的临时指针。还有其他办法吗?看起来像Searchinginasetofshared_ptr有一些可能有用的想法吗?

c++ - "error: use of deleted function"在 move 构造函数中对 unique_ptr 调用 std::move 时

#includeclassA{public:A(){}A(constA&&rhs){a=std::move(rhs.a);}private:std::unique_ptra;};此代码无法使用g++4.8.4编译并抛出以下错误:error:useofdeletedfunction‘std::unique_ptr&std::unique_ptr::operator=(conststd::unique_ptr&)[with_Tp=int;_Dp=std::default_delete]’a=std::move(rhs.a);^我知道unique_ptr的复制构造函数和复制赋值构造函数已删除

c++ - `auto` 引用的说明符类型推导

让我们考虑以下代码片段voidTest(){intx=0;int&rx=x;int*px=&x;autoapx=px;//deducedtypeisint*autoarx=rx;//deducedtypeisint}可以类比指针类型,期望arx的推导类型是int&,但实际上是int。标准中的规则是什么?其背后的原因是什么?有时我会在这样的情况下被它捕获:constBigClass&GetBigClass();...autoref_bigclass=GetBigClass();//unexpectedcopyisperformed 最佳答案

c++ - 将 std::forward 与 auto&& 一起使用是正确的做法吗

尝试了解将std::forward与auto&&变量一起使用是否是传递这些变量以允许移动的正确方法。假设有一个函数:voidmoveWidget(Widget&&w);调用者-引用右值和左值的两个变量:Widgetw;auto&&uniRefLV=w;//lvalueinitialiser,//uniRefLV'stypeisWidget&auto&&uniRefRV=std::move(w);//rvalueinitialiser,//uniRefRV'stypeisWidget&&我们知道auto&&类型的变量是通用引用,因为发生了类型推导。这意味着uniRefRV和uniRefL

c++ - 带有 const ref 参数的自赋值行为

我偶然发现了一些非常古老的代码,它有一个带有定义的复制赋值运算符的类,该运算符将其参数作为常量引用,但也不检查自赋值,因此本质上:structA{intq;A():q(3){}A&operator=(constA&a){q=a.q;return*this;}};当A的一个实例被赋值给它自己时,这个赋值运算符的行为是什么?我认为这会导致问题,因为它“破坏”了参数的常量性,任何编译器都可以假设参数没有更改并基于此进行优化。然而,clang和gcc都没有发出警告,程序运行正常。如果我在赋值运算符中赋值之前将q的值显式更改为4,这也有效。 最佳答案