草庐IT

make_pair

全部标签

c++ - 为什么不使用 `make_x()` 函数尽可能省略 move 构造函数?

我不知道为什么在最后一种情况下是在启用复制省略时调用move构造函数(甚至是强制性的,例如在C++17中):classX{public:X(inti){std::clogXmake_X(T&&arg){returnX(std::forward(arg));}intmain(){autox1=make_X(1);//1xconvertingctorinvokedautox2=X(X(1));//1xconvertingctorinvokedautox3=make_X(X(1));//1xconvertingand1xmovectorinvoked}在这种情况下,哪些规则会阻碍move构造

c++ - 为什么不使用 `make_x()` 函数尽可能省略 move 构造函数?

我不知道为什么在最后一种情况下是在启用复制省略时调用move构造函数(甚至是强制性的,例如在C++17中):classX{public:X(inti){std::clogXmake_X(T&&arg){returnX(std::forward(arg));}intmain(){autox1=make_X(1);//1xconvertingctorinvokedautox2=X(X(1));//1xconvertingctorinvokedautox3=make_X(X(1));//1xconvertingand1xmovectorinvoked}在这种情况下,哪些规则会阻碍move构造

c++ - 你能分配一个与 make_shared 等效的数组吗?

buffer=newchar[64];buffer=std::make_shared(char[64]);???你能用make_shared()为数组分配内存吗??我可以:buffer=std::make_shared(newchar[64]);但这仍然涉及调用new,据我了解make_shared更安全、更高效。 最佳答案 您需要共享分配的内存吗?您可以改用std::unique_ptr和std::make_unique在C++14上可用:autobuffer=std::make_unique(64);会有一个std::make_

c++ - 你能分配一个与 make_shared 等效的数组吗?

buffer=newchar[64];buffer=std::make_shared(char[64]);???你能用make_shared()为数组分配内存吗??我可以:buffer=std::make_shared(newchar[64]);但这仍然涉及调用new,据我了解make_shared更安全、更高效。 最佳答案 您需要共享分配的内存吗?您可以改用std::unique_ptr和std::make_unique在C++14上可用:autobuffer=std::make_unique(64);会有一个std::make_

c++ - 具有 2 个单元的结构与 std::pair?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whatisthedifferencebetweenusingastructwithtwofieldsandapair?亲爱的,我有一个关于pairs和struct的小问题。使用std::pair而不是具有两个单元格的结构有什么好处吗?我已经使用了一段时间,但主要问题是可读性:如果你想代表例如一个双倍(int“标签”,双倍“值”),你可以使用:typedefstd::pairmyElem;或者一个typedefstruct{intlabel;doublevalue;}myElem;如果您的语句具有“语义”意义

c++ - 具有 2 个单元的结构与 std::pair?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whatisthedifferencebetweenusingastructwithtwofieldsandapair?亲爱的,我有一个关于pairs和struct的小问题。使用std::pair而不是具有两个单元格的结构有什么好处吗?我已经使用了一段时间,但主要问题是可读性:如果你想代表例如一个双倍(int“标签”,双倍“值”),你可以使用:typedefstd::pairmyElem;或者一个typedefstruct{intlabel;doublevalue;}myElem;如果您的语句具有“语义”意义

c++ - 放置一个 std::pair

有没有办法放置std::pair?std::unordered_map>my_map;my_map.emplace(1,"foo","bar");//Error当然可以插入:my_map[2]=std::make_pair("bar","foo");但这不需要不必要的复制/移动吗? 最佳答案 Isthereawayofemplacingastd::pair?参数需要适合pair>的构造函数,map的value_type:my_map.emplace(1,std::make_pair("foo","bar"));Butdoesn'tt

c++ - 放置一个 std::pair

有没有办法放置std::pair?std::unordered_map>my_map;my_map.emplace(1,"foo","bar");//Error当然可以插入:my_map[2]=std::make_pair("bar","foo");但这不需要不必要的复制/移动吗? 最佳答案 Isthereawayofemplacingastd::pair?参数需要适合pair>的构造函数,map的value_type:my_map.emplace(1,std::make_pair("foo","bar"));Butdoesn'tt

c++ - Valgrind 在 std::make_unique 中显示内存泄漏

我正在使用Valgrind检查内存泄漏。不幸的是,我收到了Leak_DefinitelyLost警告。附件是我的代码的简化版本,它重现了错误:#include#include#include#includeusingnamespacestd;classBase{public:explicitBase(doublea){a_=a;}virtualvoidfun()=0;protected:doublea_;};classDerived_A:publicBase{public:Derived_A(doublea,vectorb,vectorc):Base(a),b_{b},c_{c}{}v

c++ - Valgrind 在 std::make_unique 中显示内存泄漏

我正在使用Valgrind检查内存泄漏。不幸的是,我收到了Leak_DefinitelyLost警告。附件是我的代码的简化版本,它重现了错误:#include#include#include#includeusingnamespacestd;classBase{public:explicitBase(doublea){a_=a;}virtualvoidfun()=0;protected:doublea_;};classDerived_A:publicBase{public:Derived_A(doublea,vectorb,vectorc):Base(a),b_{b},c_{c}{}v