草庐IT

try_emplace

全部标签

c++ - 安全使用 vector.emplace_back( new MyPointer ); vector 内部的故障会导致内存泄漏吗?

使用安全吗vector.emplace_back(newMyPointer());或者vector中抛出的异常或某些故障是否会导致内存泄漏?如果先将指针放在一个临时的unique_ptr中,那么执行以下某种形式会更好吗?vector.emplace_back(std::unique_ptr(newMyPointer()));因此,如果发生vector故障,临时unique_ptr仍会清理内存? 最佳答案 它不安全,如果您使用第一个版本会造成内存泄漏。documentation表示如果抛出异常,对emplace的调用将无效-这意味着您

c++ - 是否存在将 push_back 替换为 emplace_back 不正确的情况?

我能否通过将std::vector::push_back替换为emplace_back并使用C++11编译器编译它来破坏有效的C++03程序?通过阅读emplace_back引用,我认为这不应该发生,但我承认我没有完全获得右值引用。 最佳答案 我构建了一个简短的示例,当push_back被替换为emplace_back时实际上无法编译:#includestructS{S(double){}private:explicitS(int){}};intmain(){std::vector().push_back(0);//OKstd::v

C++异常处理:如何使用try、catch、throw

一、概述在C++中,异常处理是一种重要的编程技术,用于处理程序运行过程中可能出现的意外情况。异常处理通过使用try、catch和throw关键字来实现。这些关键字共同协作,帮助程序员在发生错误时,更好地控制程序的流程,并优雅地处理错误。二、关键词解释1.throwthrow关键字用于抛出一个异常。当程序中出现某种异常情况时,可以使用throw关键字抛出一个异常。例如:throw"Filenotfound";2.catchcatch关键字用于捕获并处理异常。它通常与try块一起使用,以捕获try块中抛出的异常。例如:try{//somecodethatmaythrowanexception}ca

c++ - std::unordered_map::emplace 问题与私有(private)/删除的复制构造函数

以下代码可以在gcc4.7.2(mingw)中正常编译#include#includestructtest{test()=default;private:test(testconst&)=delete;};intmain(){std::unordered_mapmap;map.emplace(std::piecewise_construct,std::forward_as_tuple('a'),std::forward_as_tuple());}如果我将test中的复制构造函数从test(testconst&)=delete;更改为test(testconst&)=default;但是

c++ - 为什么在 C++ 中使用 try 和 catch()?

我明白try和catch()用于异常处理,以防程序在某些情况下发生错误或崩溃。我也明白他们是如何工作的。但是为什么要用try和catch()?为什么不直接使用if()查找特定案例的语句,如果该案例为真,则执行cout? 最佳答案 异常处理:可以与没有机会返回单独错误代码的构造函数和运算符一起使用(它们可以将对象设置为某种错误状态——这意味着进一步的内存使用——但客户端代码也必须记住检查该错误稍后说明)例如:用户定义的类型-类X-支持符号x1=x2+x3-错误代码可以在哪里返回?可以在初始化列表中构造特定的类/结构数据成员时启动——避

c++ - std::map emplace/insert 正在插入的移动值

目前我正在阅读C++1y论文,现在我正在尝试理解标题为Improvedinsertioninterfaceforunique-keymaps的n3873论文.该论文指出insert和emplace方法存在问题,它通过以下示例说明了该问题:std::map>m;m["foo"];std::unique_ptrp(newFoo);autores=m.emplace("foo",std::move(p));在上面的代码之后,它表达了以下内容:Whatisthevalueofp?Itiscurrentlyunspecifiedwhetherphasbeenmoved-from.(Theansw

c++ - 如何处理 C++0x STL 中丢失的 'emplace_range'?

我有两个容器,假设它们是这样定义的:std::vector>a;std::vector>b;假设a和b都被填充了。我想使用move语义将整个容器a插入到b中的特定位置,以便unique_ptrmove到b。假设i是指向b中某处的有效迭代器。以下不起作用:b.insert(i,a.begin(),a.end());//error:triestocopy,notmove,unique_ptrs是否有另一种STL算法可以实现这种“move插入范围”?我想我需要一种emplace_range,但VS2010的STL中没有。我不想编写一个一个一个插入的循环,因为每次插入时都会向上movevect

c++ - push_back() 和 emplace_back() 在幕后

我目前正在自学C++,我很好奇push_back()和emplace_back()是如何工作的。当您尝试构建大型对象并将其推到容器的背面时,我一直认为emplace_back()更快。​​假设我有一个Student对象,我想将其附加到Studentsvector的后面。structStudent{stringname;intstudent_ID;doubleGPA;stringfavorite_food;stringfavorite_prof;inthours_slept;intbirthyear;Student(stringname_in,intID_in,doubleGPA_in,

c++ - 什么是 multimap::emplace() 和 move()?

我正在查看有关multimap的MSDN文档,发现它有一个成员函数multimap::emplace()。下面是该成员函数的示例。intmain(){usingnamespacestd;multimapm1;pairis1(1,"a");m1.emplace(move(is1));}看来emplace()和move()是C++0x。有人可以为我解释一下吗?我阅读了有关move()的内容,但我真的不明白它的作用(在幕后)。 最佳答案 使用vector更容易理解Eplacing。my_vector.emplace_back(1,2,3)

c++ - 如何将 std::vector::emplace_back 用于 vector<vector<int>>?

vector>res;res.emplace_back({1,2});//changetores.push_back({1,2});wouldwork这给我错误main.cpp:61:25:error:nomatchingfunctionforcallto‘std::vector>::emplace_back()’main.cpp:61:25:note:candidateis:Infileincludedfrom/usr/include/c++/4.7/vector:70:0,from/usr/include/c++/4.7/bits/random.h:34,from/usr/incl