草庐IT

时间: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++ - 将 vector<fooType> foo[num] 移植到 Windows(无 C99)

我们可以动态分配std::vectorfoo[num];像这样吗?std::vector*lSamplesPerClass=newvector[nClasses];[...]delete[]lSamplesPerClass; 最佳答案 是的,你可以(假设你真的想要一个vector数组)。但是,如果您改为这样做,将会更安全、更易于管理:std::vector>foo(num);如果标准库可以为你做,永远不要自己做动态分配。 关于c++-将vectorfoo[num]移植到Windows(无

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

windows - libfoo.a 和 foo.lib 是兼容格式吗?

一些构建脚本(例如numpy中的脚本)只需执行以下操作即可使gcc编译的库存档与VisualStudio链接器一起工作:copylibfoo.afoo.lib令人惊讶的是它似乎有效。有谁知道为什么吗? 最佳答案 取决于几个因素,它可能会或可能不会工作-并且有几个原因。我认为你的意思是完全的、可逆的兼容性。对于用于将DLL绑定(bind)到可执行文件的implib,答案是否。我曾经尝试将MSVC++implib与gcc生成的dll链接起来。如果格式是兼容的,那么当我重命名库libfoo.a时它会起作用。为了解决这个问题,有一个名为re

windows - 代码页 850 有效,65001 失败!没有对 "call foo.cmd"的响应。内部命令工作正常

问题基本上说明了问题。我使用的是WindowsXPProServicePack3ComSpec=C:\WINDOWS\system32\cmd.exe我通过Start...Run-dialog...cmd.exe启动了控制台这是我的控制台的“View”:命令,然后是输出(和我的//评论)C:\>chcp850Activecodepage:850//outputisasexpectedC:\>echo@chcp^&REM850>test850.cmd//nooutput;asecpected)C:\>typetest850.cmd@chcp&REM850//outputisasexpec

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

laravel - redis - 显示小于 $foo 的值

我正在用laravel制作一个简单的新闻网站。我快到了,但我想在redis的帮助下添加一个热门文章选项。我的问题是——redis中是否有一个选项可以显示值小于变量foo的结果。更准确地说,我在散列中添加了时间戳和ID,我只想显示时间戳为84600的结果。有什么想法吗? 最佳答案 最好的方法是将它们也添加到有序集合中,然后使用zrangebyscore访问它们。所以你要添加ZADDarticletimesarticleID到redis然后ZRANGEBYSCOREarticletimes返回结果。

java - 我该如何进行搜索 db.collection.find( { foo :/^bar$/i } ); on mongo but using Mongo Java Driver

我正在尝试使用java驱动程序在mongodb中进行不区分大小写的查询。当我搜索“abc”时,我在名为foo的字段中有一个字符串,例如“abcdef”,搜索必须返回空,但它总是返回包含“abcdef”的元素。如果我在mongo控制台中这样做db.collection.find({foo:/^abc$/i})它有效,但不返回任何内容。不返回包含“abcdef”的对象,如果我们有一个带有foo:“abc”的对象,它只返回一个但是在java驱动中我试过了。BasicDBObjectquery=newBasicDBObject();query.put("foo","^"+abc+"$");qu