我(错误地)在我的程序中进行了以下分配:std::shared_ptrm_program;//inclassm_program=std::make_unique();//inmethod当我发现它时,我首先想知道为什么它甚至可以编译。事实证明,shared_ptr对unique_ptr对象有一个特殊的移动赋值运算符。我的问题是,这样做是否总是安全的,或者它有任何影响吗?(对于代码执行来说是安全的;对于代码审查来说显然是不安全的……) 最佳答案 从某种意义上说,这样做是“安全的”,您不会遇到任何重复删除或其他问题。这样做是不行的,因为
我了解什么是std::future但我不了解何时以及如何使用std::shared_future和std::promise,而且我在网上找不到很好的解释。我会很感激一些帮助我解决这个问题。顺便说一句,这里的例子不是很清楚http://en.cppreference.com/w/cpp/thread/shared_future 最佳答案 std::shared_future当您需要拥有std::future的多个有效拷贝时,并且可能是上述std::future的多个消费者.您可以移动std::future进入std::shared_f
大家。我在C++解构中发现了一个问题。我将在下面向您展示我的代码:#include#include#includeusingnamespacestd;classB;classA{public:typedefshared_ptrPtr;shared_ptrb;intindex;A(constshared_ptr&b_,intindex_):b(b_),index(index_){}~A(){coutPtr;vectorall_a;voidaddA(){for(inti=0;i(Ptr(this),i);all_a.push_back(a);}}intindex;B(intindex_):
当我继承std::enable_shared_from_this,但是我创建了一个unique_ptr,std::enable_shared_from_this里面的weak_ptr也会被初始化吗当我通过std::move或移动构造函数“移动”到shared_ptr时?例如下面的代码会发生什么:#include#includeclassA:publicstd::enable_shared_from_this{public:std::shared_ptrgetA(){returnshared_from_this();}};intmain(){std::unique_ptru(newA()
当函数需要一个char*时,可以传入一个shared_ptr吗?我正在读取整个文本文件(长度=100),并希望将char存储到char[]数组中。我使用的天真方式是这样的:ifstreamdictFile(fileName);size_tfileLength=100;char*readInBuffer(newchar[fileLength]);dictFile.read(readInBuffer,fileLength);//processingreadInBuffuer..............delete[]readInBuffer;dictFile.close();当然,如果在d
我对类和父类(superclass)共享字段有点困惑。我期待这没问题:classSuperC{public:SuperC();protected:doublevalue;};classC:publicSuperC{public:C(doublevalue);};SuperC::SuperC(){}C::C(doublevalue):SuperC(),value(value){}但编译器告诉我C没有字段“值”。C没有继承自SuperC中定义的那个?非常感谢 最佳答案 可以,但是您只能使用构造函数初始化列表语法来初始化当前类成员。您必须
我有两个类U和T的shared_ptr,其中T是U的基数。从shared_ptr做一个隐式转换是没有问题的至shared_ptr.但也可以从shared_ptr进行转换至shared_ptr?我尝试了建议的解决方案:classT{public:virtual~T(){}protected:voidfillData()=0;};classTimpl:publicT{public:virtual~Timpl(){}protected:virtualvoidfillData()=0;};classU:publicTimpl{public:virtual~U(){}protected:virt
使用C指针我可以做这样的事情:#include#includeclassFoo{voidbar(){std::coutfoo_sptr(&foo);void(Foo::*bar_ptr)()=&Foo::bar;(foo.*bar_ptr)();(foo_ptr->*bar_ptr)();//(foo_sptr->*bar_ptr)();//doesnotcompileforme如果我想使用smart_ptr而不是C指针,我会得到一个编译器错误:error:nooperator"->*"matchestheseoperandsoperandtypesare:std::shared_pt
我正在学习C++11的特性,作为其中的一部分,我首先进入了unique_ptr和shared_ptr的世界。开始时,我编写了一些专门使用unique_ptr的代码,因此当我传递我的变量时,我需要使用std::move来完成它(或者让我明白)。经过一番努力,我意识到我确实需要shared_ptr而不是我正在做的事情。稍后快速查找/替换,我的指针被切换到共享,但我懒洋洋地只是留下了move()调用。令我惊讶的是,它不仅可以编译,而且在我的程序中表现得非常好,我得到了我期望的每一点功能......特别是,我能够“move”一个shared_ptr从ObjectA到ObjectB,并且两个对象
我有一个类持有另一个类的shared_ptr。shared_ptr声明出现编译错误,提示“没有使用此类型定义的成员”。我复制这个的代码很短:#include#includeclassMyClassImpl{};classMyClass{public:boost::shared_ptr_sptr;//errorC2208:'boost::shared_ptr':nomembersdefinedusingthistype};intmain(){MyClassmc;return0;}我在这里做错了什么?我是装有Boost1.54的VisualStudioProfessional2010。