草庐IT

c++ - 为什么 is_copy_constructible 在 MSVC12 中为 unique_ptr 返回 true

我原以为这个静态断言会触发:#include#includeintmain(){static_assert(std::is_copy_constructible>::value,"UPtrhascopyconstructor?");}但事实并非如此。使用MSVC12编译:Microsoft(R)C/C++OptimizingCompilerVersion18.00.31101forx64 最佳答案 static_assert应该触发,std::unique_ptr有一个隐式删除的复制构造函数,所以这是一个错误。这看起来与此错误报告有

c++ - unique_ptr 的赋值运算符复制由引用存储的删除器。它是功能还是错误?

想象一下当你有一个unique_ptr时的情况使用由引用存储的自定义删除器:structCountingDeleter{voidoperator()(std::string*p){++cntr_;deletep;}unsignedlongcntr_=0;};intmain(){CountingDeleterd1{},d2{};{std::unique_ptrp1(newstd::string{"first"},d1),p2(newstd::string{"second"},d2);p1=std::move(p2);//doesd1=d2undercover}std::cout令我惊讶的

c++ - 转发没有类声明的 shared_ptr

注意:我发现错误的来源实际上与shared_ptr无关,只是在错误消息中巧妙地伪装成这样。因此下面基本上是废话(不是答案,他们很好)--我在使用shared_ptr(目前正在boost)时遇到了一些问题,我需要简单地将指针转发到另一个函数。使用native指针,干预函数不需要访问类的定义,但使用smart_ptr似乎可以访问。有什么办法可以避免这种情况吗?例如,给定一个目标函数:voidfunc(shared_ptrconst&obj)const&解决了部分问题,但是假设我们有一个getter类,它为其他类获取对象,例如:shared_ptrsomeClassInstance();这里

c++ - 为什么 std::shared_ptr 使用原子 cpu 操作

我无法理解为什么shared_ptr使用原子cpu指令...我无法找出原因,因为它不是线程安全的。有人可以解释一下吗。如果你想知道我是怎么知道它使用原子结构的:有一段来自C++的剪辑以及Herb和Andrei谈论它的地方,但他们从未提及为什么会这样。 最佳答案 shared_ptr的任何实例都是多线程安全的。它指向的数据不是多线程安全的。参见this.如果正确应用原子指令(通过竞争线程访问以相同顺序完成保护)是实现线程安全的一种方法。另一种方法是使用互斥体。查看BOOST的类似问题:Isboostshared_ptrxxxthrea

时间:2019-05-06 标签:c++unique_ptr参数传递

假设我有以下代码:classB{/**/};classA{vectorvb;public:voidadd(B*b){vb.push_back(b);}};intmain(){Aa;B*b(newB());a.add(b);}假设在这种情况下,所有原始指针B*可以通过unique_ptr处理.令人惊讶的是,我无法找到如何使用unique_ptr转换此代码。.经过几次尝试,我想出了以下代码,它可以编译:classA{vector>vb;public:voidadd(unique_ptrb){vb.push_back(move(b));}};intmain(){Aa;unique_ptrb(

c++ - std::unique_ptr 的 clang 错误

我有一个名为IList的基础对象。然后我有VectorList,它继承了IList。然后我有这样的功能:std::unique_ptrfactory(){autovlist=std::make_unique();returnvlist;}这在gcc下编译没有问题,但是clang给出以下错误:test_file.cc:26:9:error:noviableconversionfrom'unique_ptr>'to'unique_ptr>'returnvlist;如何正确处理此类错误? 最佳答案 看起来(您的)Clang在这方面仍然遵循

c++ - shared_ptr 现实生活中的用例

shared_ptr将在我们希望拥有一个动态分配项目的多个所有者的情况下使用。问题是,我无法想象我们需要多个所有者的任何场景。我能想到的每个用例都可以用unique_ptr解决。有人可以提供一个现实生活中的用例示例,其中包含需要shared_ptr的代码(这里需要,我的意思是作为智能指针的最佳选择)?我所说的“现实生活”是指一些实用的用例,而不是过于抽象和虚构的东西。 最佳答案 在我们的模拟器产品中,我们使用一个框架在模拟组件(称为端点)之间传递消息。这些端点可以驻留在进程内的多个线程上,甚至可以驻留在模拟集群中的多台机器上,消息通

c++ - 如何使用 ifdef 检测是否支持 Windows DWORD_PTR 类型?

有somenewintegertypes在WindowsAPI中支持Win64。他们并不总是得到支持;例如theyaren'tpresentinMSVC6.我怎样才能写一个#if是否支持这些类型的检测条件?(我的代码需要在许多不同版本的MicrosoftVisualC++下编译,包括MSVC6。因此我需要提供我自己对这些类型的定义,并带有#if以在较新的编译器中禁用它们)。(对于搜索者,完整的类型列表是:DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR) 最佳答案 宏MSC_VER是在[12

c++ - 如何将 unique_ptr 与 operator new 一起使用

我正在分配一block具有输入大小的临时内存,我想使用unique_ptr跟踪适当的生命周期,而不必明确担心自己释放它。这是我想出的:{std::unique_ptrsp;sp.reset(reinterpret_cast(operatornew(100)));}我不得不使用BYTE因为MSVC不会用std::unique_ptr编译.根据我的测试,new和delete运算符按预期调用。由于这是一种不常见的用法(即显式使用operatornew),我想检查一下这没有什么问题吗?是否有更好/更清洁的替代品? 最佳答案 假设您想使用ne

generics - Out-projected 类型 'ArrayList<*>' 禁止使用 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList'

我有这个片段:classRecyclerViewAdapterinternalconstructor(valclazz:Class,vallayout:Int,vardataList:MutableList).........funRecyclerView.getDataList():ArrayList{return(adapterasRecyclerViewAdapter).dataListasArrayList}.........然后我在这个上使用它:recyclerView.getDataList().add(Person("LemAdane","41yearsold",0))但