草庐IT

unique-identifiers

全部标签

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令我惊讶的

时间: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++ - Qt/CMake : missing ':' before identifier 'slots' `

我正在尝试使用我自己的cmake文件而不是它附带的qmake.pro文件从Qt编译录音机示例,但我收到以下错误:qtaudiorecorder\audiorecorder.h(63):错误C2146:语法错误:在标识符“插槽”之前缺少“:”我的CMake文件:find_package(Qt5REQUIREDCOMPONENTSmultimediawidgets)set(CMAKE_AUTOMOCON)set(CMAKE_INCLUDE_CURRENT_DIRON)find_package(Qt5WidgetsREQUIRED)find_package(Qt5MultimediaREQU

c++ - std::unique_lock<std::mutex> 禁止dll卸载

我在卸载dll时遇到问题。就像this一但退出不同。我正在使用LoadLibraryA加载一个dll然后调用一个函数并用FreeLibrary关闭dll.但是,dll并没有卸载,但FreeLibrary返回成功。减少代码:voidfoo(){std::unique_locklock(mtx_);}在调试代码和查看ProcessExplorer时unique_lock创建第二个线程,但是为什么呢?此外,只要应用程序运行,该线程就会运行。没有别的了;dll没有其他句柄,没有其他功能。此外,dll仍在程序中加载。如果我删除上面的行,一切都很好。dll卸载正常,没有额外的线程。所以我的问题是,

Windows 批处理脚本 : Collect unique occurences of a string in a file

我有一个文件,其中逗号前的第一个字符串是某种标识符。这是一个示例:A,bla,bla...B,bla,bla...A,bla,bla...C,bla,bla...我需要解析一个文件来收集这个字符串的所有唯一出现。因此,理想情况下,在处理之后我会得到某种数组[A,B,C]。问题是批处理脚本不支持官方数组。我知道有一些变通办法,但我检查过的那些看起来很丑陋。到目前为止,我所拥有的是这样的:FOR/F"tokens=1delims=,"%%iin(%FILE%)do(echo%%i)这会产生输出:ABAC如何消除字符串的重复出现?实现这一目标的优雅方式是什么?请分享您对如何解决此问题的想法。

windows - Paperclip my Image 无法被 'identify' 命令识别。 (运行 Windows)

我正在使用Paperclip调整图像大小,但我一直收到此错误(1个错误禁止保存此项目:图片C:/DOCUME~1/HP_ADM~1/LOCALS~1/Temp/stream,5584,0.jpg无法被“identify”命令识别。)我几乎尝试了所有我在网上找到的东西:将Paperclip.options[:command_path]="C:\ImageMagick-6.6.6-Q16"添加到我的development.rb对project.rb进行更改(删除单引号)我正在使用最新的Ruby/Rails和Paperclip1.3.3运行Windows我刚接触Rails,我不知道该做什么。

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

c++ - 语法错误 : missing ';' before identifier 'PVOID64' when compiling winnt. h

我最近得到了一个应用程序的源代码。当我尝试构建解决方案时,我在包含winnt.h的所有部分都遇到了错误。错误代码略有不同,但它们始终指向winnt.h中的这些行:typedefvoid*PVOID;typedefvoid*POINTER_64PVOID64;和struct{DWORDcrc;BYTErgbReserved[14];}CRC;那么,这可能是什么原因造成的呢?winnt.h是标准头文件,没有被修改。跟我用VS2010有关系,还是我用64位windows有关系?还是需要某种配置?编辑:这是确切的错误代码:1>C:\ProgramFiles(x86)\MicrosoftSDKs