草庐IT

Unique_ptr

全部标签

c++ - 将 std::unique_ptr 重置为指向数组的指针有什么问题?

我看到如下代码片段:std::unique_ptrmCache;mCache.reset(newuint8_t[size]);有人告诉我这段代码有一些问题。谁能给我一些细节? 最佳答案 给定std::unique_ptrmCache;,当mCache被摧毁了它的deleter将使用delete销毁被管理的指针(如果有的话),即为单个对象释放内存。但是在mCache.reset(newuint8_t[size]);之后什么mCachemanages是指向数组的指针,这意味着它应该使用delete[]反而;使用delete为数组释放内存

c++ - 从列表中删除 boost::shared_ptr 的正确方法是什么?

我有一个std::list的boost::shared_ptr我想从中删除一个项目,但我只有一个T*类型的指针,它与列表中的一个项目匹配。但是我不能使用myList.remove(tPtr)我猜是因为shared_ptr没有实现==为其模板参数类型。我的直接想法是尝试myList.remove(shared_ptr(tPtr))这在语法上是正确的,但它会因临时shared_ptr后的双重删除而崩溃有一个单独的use_count。std::list>myList;T*tThisPtr=newT();//Thisiswrong;onlydoneforexamplecode.//stand-

c++ - 如何从 vector 中删除 shared_ptr

像下面的代码,m_vSprites是shred_ptr的vector,如果他的一个元素更新失败,我想从vector中删除它,但是当我想使用删除时我的代码崩溃了。但我不明白为什么,有人可以帮忙吗?我需要使用erase的原因是因为我的应用程序会不断地向vector中添加元素,但如果某些元素满足它们的终止条件,也会不断地从vector中删除对象。如果我不删除它,vector会随着程序的运行而变得巨大!RECTrcOldSpritePos;typedefboost::shared_ptrSmartSprite;vector::iteratorsiSprite;for(siSprite=m_vS

c++ - std::tr1::shared_ptr 是否会抛出 bad_alloc 并且在 try/catch block 中是个好主意?

我实际上正在制作一个简单的C++SFML游戏,我想学习更多关于C++编程的知识。现在我正在使用shared_ptr来管理资源。创建新资源时,我对shared_ptrs有一些疑问,例如:shared_ptrresource(newResource(World::LEVEL));根据boostshared_ptr(Y*p)throwsbad_alloc。我不知道std::tr1是否也这样做。而且我不知道我是否应该担心将shared_ptr放入try/catchblock中以检查是否抛出bad_alloc。这是一个好的编程习惯吗? 最佳答案

c++ - 高效优雅地返回放置的 unique_ptr

我发现(thankstoaStackOverflowcomment)我的代码中存在安全漏洞:std::vector>items;templateItem&create(TS&&...mArgs){autoitem(newItem(std::forward(mArgs)...);items.emplace_back(item);//Possibleexceptionandmemoryleakreturn*item;}基本上,如果emplace_back抛出,使用原始new分配Item可能会泄漏内存。解决方案永远不会使用原始new,而是在方法主体中使用std::unique_ptr。std

c++ - 为什么 push_back 在包含 unique_ptr 的结构上成功,除非该结构具有自定义析构函数?

当且仅当我删除Foo的自定义析构函数时,以下代码才能编译。structFoo{std::unique_ptrbar;~Foo(void){}//ThisLine};std::vectorfoos;foos.push_back(Foo());以下是我认为我对这种情况的理解:失败是因为unique_ptrs无法复制,std::vector::push_back(thing)调用thing's复制构造函数。如果我写Foo显式移动bar的自定义复制构造函数,那么一切都会好起来的。但是,禁用ThisLine将导致代码编译。我认为即使没有ThisLine也应该编译失败,因为我仍在尝试push_ba

c++ - 尝试理解 std::enable_shared_from_this<T> 但使用它会导致 bad_weak_ptr

我试图理解std::enable_shared_from_this类的行为,但我无法理解。所以我写了一个简单的程序来测试不同的情况。问题谁能解释一下下面代码的行为,因为我无法解释观察到的结果。谢谢你的帮助。代码#include#includestructC:std::enable_shared_from_this{};intmain(){{//test1std::shared_ptrfoo,bar;foo=std::make_shared();bar=foo->shared_from_this();//okstd::coutfoo=std::shared_ptr(newC);std::

c++ - 在库接口(interface)中提供对 weak_ptr 的访问是否明智?

我编写了一个库,公开了对多个相关对象类型的引用。所有这些对象的生命周期都由库在内部通过boost::shared_ptr管理。根据库的性质,库的用户还可以知道任何公开对象的生命周期。所以他们可以存储指针或保留对这些对象的引用。他们这样做并知道这些对象何时不再有效是合理的。但我对强制我的用户讲道理感到内疚。公开库是否可以接受weak_ptr的对象?其他图书馆有这样做吗?我已经分析了这个库在应用程序中的使用情况,发现它对任务至关重要,无法公开weak_ptr独家。让匹配的API函数公开一个引用或一个weak_ptr或使任何对象能够公开一个weak_ptr是否更明智?对自己?

C++智能指针之unique_ptr

C++智能指针之unique_ptr前言一、unique_ptr1.1unique_ptr类的初始化1.2unique_ptr禁止拷贝和赋值1.3release、reset函数1.4向unique_ptr传递删除器1.5unique_ptr与动态数组的使用总结前言  在C++中,动态内存的申请和释放是通过运算符:new和delete进行管理的。其中new负责申请内存,delete负责释放内存。  动态内存的使用很容易出现问题,这主要在于你需要保证在正确的时间释放内存,这是比较困难的,如果你忘记释放内存,就会造成内存泄露;有时在还有指针引用内存的情况下我们就释放了它,在这种情况下就会产生引用非法

c++ - std::map unique std::less<> 函数,用于 2D 点作为键

好吧,经过四个小时的调试,尽管我很困惑,但我找到了问题的原因......我正在制作一些程序,在std::map中保存一些点并在我的窗口中呈现这些点。但奇怪的是,有些点未能进入map。std::mapm_Props_m;voidAddProp(std::pairp){m_Props_m.insert(p);}structPoint2{unsignedintPoint2::x;unsignedintPoint2::y;//--------Point2::Point2():x(0),y(0){}boolPoint2::operator(constPoint2&b)const{return(x