草庐IT

shared_id

全部标签

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++ - 如何在 Visual Studio 中解决 make_shared 的 10 个限制

在一些旧代码上使用C++10的新功能时,我遇到了无法调用带有12个参数的make_shared的问题。我记得Microsoft的STL谈到他们如何为make_shared使用仿真,并且10是最大值。显然仅仅为此重构代码是不可能的,所以基本上我的问题是-有没有办法在VS2010中为make_shared获取超过10个参数。 最佳答案 make_shared(1,2,3,4,5,6,7,8,9,10,11,12);可以替换为shared_ptr(newfoobar(1,2,3,4,5,6,7,8,9,10,11,12));在C++11中

c++ - C++类中的ID数据成员

我的老师要求我们创建自动生成的ID数据成员,并且一旦建立就不能修改。什么是最合适的类型?如果答案是staticconstintID;当它是const时,如何自动生成它? 最佳答案 由于ID必须是唯一的,因此应确保两个实例永远不会获得相同的ID。此外,类外的任何人都不应干预UID的生成。首先,您在类中定义一个静态字段:classData{private:staticintnewUID;(...)};//Thefollowingshallbeputina.cppfileintData::newUID=0;然后,在创建每个实例后,它应该采

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::

PHP:无法从数据库中检索自动增量ID

我正在创建一个数据库获取应用程序,这是用于测试。所有功能正常,但无法从数据库中检索自动增量ID。它说“未定义的索引ID”(如果未定义为null),因此我尝试了ID=null,但这一无所获。我的数据库具有:电子邮件,密码,ID(AI,唯一)。我该怎么做才能获取ID?代码:$email="[email protected]";$password="test";$conn=mysqli_connect('localhost','root','','users_database');$query="SELECTemail,passwordFROMusers_main_infoWHEREemail='$

mysql中删除数据后,新增数据时id会跳跃,主键自增id不连续

引言:在使用MySQL数据库时,有时候我们需要删除某些记录,但是删除记录后可能会导致表中的id不再连续排序。如何实现删除记录后让id重新排序的功能。如图:删除数据后,中间的id不会自动连续。下面有两种方法进行重新排序:方法一:删除表中id,重新添加id字段:ALTERTABLEtestDROPid;ALTERTABLEtestADDidint(20)NOTNULLPRIMARYKEYAUTO_INCREMENTFIRST其中,first表示将id字段放到第一个位置,test为数据库名方法二:SET@i=0;UPDATEtestSET`id`=(@i:=@i+1);ALTERTABLEtestA

c++ - 使用 shared_ptr 启动 std::thread

当你构造一个新线程时,提供的函数对象被复制到属于新创建线程的存储中。我想在一个新线程中执行一个对象方法。不应复制该对象。所以我将对象的shared_ptr传递给std::thread构造函数。如何使用std::shared_ptr()对象启动新线程?例如classFoo{public:voidoperator()(){//dosomething}};intmain(){std::shared_ptrfoo_ptr(newFoo);//Iwanttolaunchafoo_ptr()inanewthread//Isthisthecorrectway?std::threadmyThread(

c++ - Visual Studio 2010 中 std::make_shared() 的友元函数(不是 Boost)

如何创建std::make_shared()的友元函数。我试过:classMyClass{public:friendstd::shared_ptrstd::make_shared();//or//friendstd::shared_ptrstd::make_shared();protected:MyClass();};但它不起作用(我使用的是VisualStudio2010SP1) 最佳答案 如何向您的类添加一个静态方法:classFoo{public:staticshared_ptrcreate(){returnstd::shar

c++ - 特化 std::make_shared

我有一个具有严格对齐要求(由于使用了AVX操作)的类型,它大于平台默认对齐方式。为了简化此类的使用,我想专门化std::make_shared以始终为该类型使用合适的分配器。像这样:namespacestd{templateinlineautomake_shared(Args&&...args){returnstd::allocate_shared(allocator_type,std::forward(args)...);}}我的问题是,标准允许这样做吗?它会按预期工作吗? 最佳答案 来自N4140[namespace.std]/