草庐IT

unique_ids

全部标签

c++ - std::make_shared/std::make_unique 不使用列表初始化有什么原因吗?

具体来说:直接列表初始化(cppreference.com(3))。两者都是std::make_shared和统一初始化特性在C++11中被引入。所以我们可以在堆上分配对象时使用聚合初始化:newFoo{1,"2",3.0f}.这是一种直接初始化没有构造函数的对象的好方法,例如聚合、pod等。根据我的经验,现实生活中的场景(例如在函数中声明临时结构)以有效地向lambda提供参数集变得非常普遍:voidfoo(){structLambdaArgs{std::stringarg1;std::stringarg2;std::stringarg3;};autoargs=std::make_s

c++ - 使用 unique_ptr 作为参数在类上调用方法是否合法?

例如,如果您有一个声明std::unique_ptra;,那么下面会不会出问题呢?a->foo(std::move(a));就我而言,foo是一个虚函数,所以我不能把它移出类。如果上面的代码导致问题,那么有什么替代方法可以达到同样的效果? 最佳答案 C++11和C++14这取决于foo的签名:如果是foo(std::unique_ptr&&),那么调用是安全的,因为指针保留旧值直到foo开始执行。是否foo更改指针是不相关的,因为被调用函数执行中的任何语句都在命名函数的表达式求值之后排序。如果是foo(std::unique_ptr

c++ - std::unique_ptr<> 作为基于节点的结构中的指针

由于大多数人都喜欢拼图,我将以(拼写错误:))gotw之类的介绍开始这个问题,请注意,如果您不关心它,则可以跳过热身(JG问题)并阅读G问题,因为这是我的“真正的SO问题”。DuringreviewofthecodesamplesprovidedbypotentialnewemployeesyoustumbleduponalinkedlistwhoseimplementationusesmodernC++11feature,anstd::unique_ptr.templatestructNode{Tdata;std::unique_ptr>next;Node(){}Node(const

c++ - 我应该对已经定义的智能指针使用 make_unique 还是 reset() ?

假设我有一个函数可以选择分配一个对象并返回它://Classmemberstd::dequem_receiveQueue;//Functioninclassthatoperatesonthequeuetemplatestd::unique_ptrGet(){std::unique_ptrresponse;if(!m_receiveQueue.empty()){response=std::make_unique(m_receiveQueue.front());m_receiveQueue.pop();}returnresponse;}我应该改为:response.reset(newT{m

c++ - 为什么 std::unique_lock 有默认构造函数?

我在看thistalk路易斯·布兰迪(LouisBrandy),当一位观众提出这个显而易见的问题时:Whydoesstd::unique_lockhaveadefaultconstructor?现在我必须知道。 最佳答案 unique_lock是可移动的。它有一个基本上是“空”的移出状态,不与任何互斥锁相关联。也可以通过调用release()来达到此状态。鉴于此状态的存在,以及拥有默认构造函数的好处(例如能够创建任意大小的动态数组),添加创建相同状态的默认构造函数是个好主意。 关于c++

c++ - 将 ID 号映射到类

我正在建立一个系统,在该系统中,我可以根据从文件中读入的一些信息即时实例化类。所以,这必须在运行时完成。所讨论的类是多态的,并且都继承自CBaseTheoryEnt类。我想要做的是将ID号与每个类相关联(例如,使用无序映射)。本质上,我的管理类将查看从输入文件中读入的一系列ID号,然后实例化适当的类。将类与ID相关联然后根据输入实例化它们的理想且有效的方法是什么? 最佳答案 一种方法是使用模板函数来实例化CBaseTheoryEnt的子类:templateCBaseTheoryEnt*instantiator(){returnnew

c++ - 特定于线程的数据——为什么我不能只使用带有线程 ID 的静态映射?

在阅读POSIX线程时,我遇到了一个线程特定数据的示例。我确实有一个困惑的地方......线程特定的数据接口(interface)看起来有点笨拙,尤其是当你混合使用pthread_once、各种初始化程序等时。有什么理由我不能只使用静态std::map,其中键是pthread_self()id,数据值保存在std::pair的第二部分?我想不出只要它被包裹在互斥量中就无法工作的原因,但我没有看到任何关于它的建议或任何类似的东西让我感到困惑,因为它听起来比提供的API容易得多。我知道线程可能有很多catch-22,所以我想我会问一下,看看我是否要介入……一些不愉快的事情?:)

c++ - gcc4 模板错误或更可能是 id10t 错误

以下代码在VisualStudio下编译得很好,但gcc4.6.2或4.7都不能处理它。它似乎是有效的,但gcc似乎无法解决const和非const参数之间的区别。这可能是编译器错误吗?structCReadType{};structCWriteType{};templatestructAddPkgrConstByType{};templatestructAddPkgrConstByType{typedefTtype;};templatestructAddPkgrConstByType{typedefTtype;};templatestructAddPkgrConstByType{ty

c++ - std::unique_ptr::reset 检查托管指针是否为空?

我一直在阅读有关C++11智能指针的内容,以便在我的源代码中使用它们,我一直在阅读的文档是cppreference.com上的文档;在阅读std::unique_ptr时,在resetfunction上有一个文档对我来说似乎不正确(强调我的):Replacesthemanagedobject.Givencurrent_ptr,thepointerthatwasmanagedby*this,performsthefollowingactions,inthisorder:Savesacopyofthecurrentpointerold_ptr=current_ptr.Overwritest

c++ - 最令人烦恼的解析是否带有合格的 id?

考虑:structFoo{enum{bar};explicitFoo(int){}};structBaz{explicitBaz(Foo){}};Bazb(Foo(Foo::bar));//#1即使Foo::bar是一个qualified-id并且不可能是一个有效的参数名称,第1行是最令人烦恼的解析吗?ClangandGCCdisagree;哪个编译器是正确的? 最佳答案 Clang是对的。有点令人惊讶的是,parameter-declaration的语法允许qualified-和unqualified-id,因为它接受所有声明符: