草庐IT

auto_ptr_ref

全部标签

c++ - reference_wrapper 和 std::ref 是如何工作的?

我正在尝试了解std::ref的工作原理。#include#includetemplatevoidfunc(Cc){c+=1;}intmain(){intx{3};std::cout在上面的代码中,我认为模板参数C第三个函数调用被实例化为std::reference_wrapper.阅读时thereference,我注意到没有+=std::reference_wrapper中的运算符.那么,c+=1;怎么样?有效吗? 最佳答案 howisc+=1;valid?因为reference_wrapper可隐式转换为int&通过其转换运算符

c++ - 我应该使用 boost::ptr_vector<T> 还是 vector<boost::shared_ptr<T>>?

我需要一个指针容器。你会推荐boost::ptr_vector或std::vector>?(或者别的什么?)如果感兴趣的话,我的实际数据结构相对复杂(见here)并且目前存储对象,而不是指针,但我想改变它(使用指针容器),以摆脱不必要的复制:typedefstd::multimap>VecElem;std::vectorvec; 最佳答案 谁拥有对象?如果容器拥有对象(意味着对象的生命周期不应超过容器),请使用ptr_vector。否则,使用shared_ptr的vector。标准库容器(例如std::vector或std::lis

c++ - 我应该使用 boost::ptr_vector<T> 还是 vector<boost::shared_ptr<T>>?

我需要一个指针容器。你会推荐boost::ptr_vector或std::vector>?(或者别的什么?)如果感兴趣的话,我的实际数据结构相对复杂(见here)并且目前存储对象,而不是指针,但我想改变它(使用指针容器),以摆脱不必要的复制:typedefstd::multimap>VecElem;std::vectorvec; 最佳答案 谁拥有对象?如果容器拥有对象(意味着对象的生命周期不应超过容器),请使用ptr_vector。否则,使用shared_ptr的vector。标准库容器(例如std::vector或std::lis

c++ - `pair::operator=(pair&&)` 错误与 `auto&` 推断 move 操作 - libstdc++ 回归?

鉴于这个程序:structVal{Val()=default;Val(Val&&)=default;auto&operator=(Val&&);};/*PLACEHOLDER*/auto&Val::operator=(Val&&){return*this;}替换/*PLACEHOLDER*/与...intmain(){std::vector>v;v.emplace(std::begin(v),0,Val{});}...编译成功:g++6.2.0g++6.3.0g++7.0.1(主干)clang++3.9.1clang++5.0.0(HEAD)onwandbox替换/*PLACEHOLD

c++ - `pair::operator=(pair&&)` 错误与 `auto&` 推断 move 操作 - libstdc++ 回归?

鉴于这个程序:structVal{Val()=default;Val(Val&&)=default;auto&operator=(Val&&);};/*PLACEHOLDER*/auto&Val::operator=(Val&&){return*this;}替换/*PLACEHOLDER*/与...intmain(){std::vector>v;v.emplace(std::begin(v),0,Val{});}...编译成功:g++6.2.0g++6.3.0g++7.0.1(主干)clang++3.9.1clang++5.0.0(HEAD)onwandbox替换/*PLACEHOLD

c++ - 在销毁期间使用 std::shared_ptr 的 Segfault 可能是由于堆栈上的函数调用过多

以下代码编译运行良好:#includestructMyTree{std::shared_ptrleft;std::shared_ptrright;intval;MyTree(std::shared_ptrleft_,std::shared_ptrright_,intval_):left(left_),right(right_),val(val_){};};intmain(){std::shared_ptrt(newMyTree(std::shared_ptr(),std::shared_ptr(),0));for(inti=0;i但是,当for循环从10000更改为100000时,我收

c++ - 在销毁期间使用 std::shared_ptr 的 Segfault 可能是由于堆栈上的函数调用过多

以下代码编译运行良好:#includestructMyTree{std::shared_ptrleft;std::shared_ptrright;intval;MyTree(std::shared_ptrleft_,std::shared_ptrright_,intval_):left(left_),right(right_),val(val_){};};intmain(){std::shared_ptrt(newMyTree(std::shared_ptr(),std::shared_ptr(),0));for(inti=0;i但是,当for循环从10000更改为100000时,我收

c++ - "auto"类型推导编译而显式类型给出错误

这个问题在这里已经有了答案:WhycanIuseautoonaprivatetype?(5个回答)关闭8年前。我正在使用VisualStudio2012,但我发现了一些奇怪的东西。我不是在写一些我必须在多个编译器之间兼容的东西,但它可能会在以后(当代码放在网络上时,用户不想得到编译器错误),但我不想写一些错误的东西,或者不是原生的。这是测试代码:classA{classB{public:inti;};BmyB;public:B&getB(){returnmyB;}};intmain(){Aa;A::B&b=a.getB();auto&b2=a.getB();}main中的第一行弹出er

c++ - "auto"类型推导编译而显式类型给出错误

这个问题在这里已经有了答案:WhycanIuseautoonaprivatetype?(5个回答)关闭8年前。我正在使用VisualStudio2012,但我发现了一些奇怪的东西。我不是在写一些我必须在多个编译器之间兼容的东西,但它可能会在以后(当代码放在网络上时,用户不想得到编译器错误),但我不想写一些错误的东西,或者不是原生的。这是测试代码:classA{classB{public:inti;};BmyB;public:B&getB(){returnmyB;}};intmain(){Aa;A::B&b=a.getB();auto&b2=a.getB();}main中的第一行弹出er

c++ - 如何初始化一个unique_ptr

我正在尝试向我的类(class)添加延迟初始化函数。我对C++不是很精通。谁能告诉我我是如何实现的。我的类(class)有一个私有(private)成员定义为:std::unique_ptranimal;这是带有一个参数的原始构造函数:MyClass::MyClass(stringfile):animal(newAnimal(file)){}我刚刚添加了一个无参数构造函数和一个Init()函数。这是我刚刚添加的Init函数:voidMyClass::Init(stringfile){this->animal=???;}我需要在那里写什么才能使它等同于构造函数正在做的事情?