草庐IT

push_btn

全部标签

c++ - 将指针 push_back 到指针 vector 中是内存泄漏吗?

在我的类中,我有一个成员变量std::vectorchildren下面的类成员函数会造成内存泄漏吗?//addsachildnode{node*child=newnode("blah","blah","blah");child->Set_Parent(this);children.push_back(child);//vector复制了一个指针,我有两个指向同一内存的指针,然后原始指针超出范围,对吗?这可能简单明了,但我只想确认我的假设。谢谢 最佳答案 这不是泄漏……还不是。但是,如果vector超出范围,或者你erase,pop_

c++ - push_back() 和 resize(size()+1) 有区别吗

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。通过执行以下任一操作,可以扩展标准vector以容纳更多成员:std::vectorv;v.push_back(1);或intos=v.size();v.resize(os+1);v[os]=1;除了使用push_back()的代码简洁之外,还有其他区别吗?例如,一种比另一种更有效,还是在每种情况下分配的额外内存不同?

c++ - std::vector push_back(Object()) 和 push_back(new Object()) 的区别?

在我当前的代码中,我想将新的DrawObjects插入到我创建的vector中,std::vector对象;有什么区别:objects.push_back(DrawObject(name,surfaceFile,xPos,yPos,willMoveVar,animationNumber));和objects.push_back(newDrawObject(name,surfaceFile,xPos,yPos,willMoveVar,animationNumber)); 最佳答案 第一个添加非指针对象,而第二个添加指针到vector。

c++ - std::vector::push_back 不可复制对象给出编译器错误

我在g++(GCC)4.7.2上遇到编译错误但不在MSVC-2012当试图std::vector::push_back不可复制(私有(private)复制构造函数)但可移动的对象。对我来说,我的示例看起来与SO和其他地方的许多其他示例相同。错误消息使它看起来像是结构不是“可直接构造”的问题-我不知道这意味着什么,所以我加倍不确定为什么对象需要“可直接构造”才能被推回。#include#includestructMyStruct{MyStruct(std::unique_ptrp);MyStruct(MyStruct&&other);MyStruct&operator=(MyStruct

c++ - 为什么 push_back 有两个左值和右值重载?

为什么一个类/函数会有两个重载,一个用于左值,一个用于右值?例如,来自this视频,它说我们有两个重载vector::push_backvoidpush_back(constT&value);voidpush_back(T&&value);为什么我们不能只有一个值重载,voidpush_back(Tvalue);如果它是一个左值,值将被复制,如果它是一个右值,值将被move。这不是标准的工作方式和保证方式吗? 最佳答案 根据您的按值提议,技术上会有复制+move或move+move,而对于其他两个重载,只有一个拷贝或一个move。

c++ - 在 push_back pop_front 场景中是否需要使用互斥锁锁定 STL 列表?

我有一个线程后推到STL列表,另一个线程从列表中弹出。在这种情况下我需要用互斥量锁定列表吗? 最佳答案 来自SGI'sSTLonThreadSafety:Ifmultiplethreadsaccessasinglecontainer,andatleastonethreadmaypotentiallywrite,thentheuserisresponsibleforensuringmutualexclusionbetweenthethreadsduringthecontaineraccesses.由于您的两个线程都修改了列表,我想您必

c++ - push_back 如何在 STL vector 中实现?

我在一次采访中被问到这个问题。我回答的点是这样的1)指向当前位置的索引;2)必要时调整大小。谁能详细说明一下? 最佳答案 STLvector有一个size(当前存储元素的数量)和capacity(当前分配的存储空间)。如果size,一个push_back简单地将新元素放在末尾并递增size1.如果size==capacity在push_back之前,分配了一个新的更大的数组(两倍大小是常见的,但这是依赖于实现的afaik),所有当前数据都被复制(包括新元素),并释放旧分配的空间。如果分配失败,这可能会引发异常。操作的复杂性是摊销O(

c++ - vector.emplace_back() 和 vector.push_back() 做同样的事情吗?

所以我试图将整数添加到我的vector的背面,并错误地认为push_back()将新数据添加到vector的前面(又名vector[0])。我在Xcode中做了一个测试,并针对emplace_back()测试了push_back()并得到了相同的结果。我以为他们是不同的,但这让我觉得也许他们做同样的事情。如果是这样,为什么vector有不同的方法?这是我的代码,以防我这样做:#include#includeusingnamespacestd;intmain(intargc,constchar*argv[]){//forpush_backvectorpush;push.push_back

c++ - 为什么 std::vector::push_back 需要赋值运算符

std::vector::push_back(constT&value)根据this要求类型T是CopyInsertable.但是,除非我提供公共(public)赋值运算符,否则使用失败(clang、GCC、Visual;均没有c++11)编译以下程序。#includeclassA{A&operator=(constA&rhs);//private!!};intmain(){std::vectorv;Aa;v.push_back(a);}为什么我需要提供这个赋值运算符,我的印象是复制构造就足够了。附言我在标准中找不到定义这个的地方,所以如果你能指出引用,我将不胜感激

c++ - __mm128 的 vector 不会 push_back()

这个简单的SSE代码:#include#includeintmain(){std::vectorblah;blah.push_back(__m128());}在MSVC10上崩溃并在0xffffffff处出现段错误。可能出了什么问题? 最佳答案 std::vector不分配特殊对齐的内存,__m128需要用它来存储它的数据。您将不得不换出分配器,或者将其替换为4个float的数组,然后在每次访问vector时执行未对齐的加载或复制到对齐的位置。 关于c++-__mm128的vector不