草庐IT

non_lazy_ptr

全部标签

c++ - shared_ptr<> 到数组自定义删除器(使用 make_shared)

是否可以对shared_ptr指向的数组使用make_shared和自定义删除器(下面是我尝试通过构造函数执行此操作的方式,但我不知道该怎么做可以通过使用make_shared来工作吗?intn=5;shared_ptra(newint[n],default_delete());我想让它看起来像与此类似的东西,但为int数组分配内存并具有自定义删除器。这可能吗?intn=5;shared_ptra;a=make_shared(); 最佳答案 不幸的是,目前无法使用std::make_shared指定自定义删除器,但是,如果需要,您可

c++ - 如何使用 lambda 作为 std::unique_ptr 的删除器?

检查以下设计的程序:#include#includetemplateusingUniPtr=std::unique_ptr>;int*alloc(){returnnewint;}UniPtrfunc(){autodealloc=[](int*p){deletep;};returnUniPtr{alloc(),dealloc};}intmain(){autop=func();return0;}来自std::functionconstructormanual,我认为构建std::function对象可能会抛出异常,即使这个比例很低:UniPtrfunc(){autodealloc=[](i

c++ - 前向声明的类型和 "non-class type as already been declared as a class type"

我对以下代码有疑问:templatevoidfoo(structbar&b);structbar{};intmain(){}它在GCC上编译成功,但在MSVC(2008)上编译失败并出现以下错误:C2990:“bar”:已声明为类类型的非类类型是代码错误还是MSVC中的错误?如果我在模板定义之前添加structbar;就可以了。 最佳答案 我们有我们的赢家:https://connect.microsoft.com/VisualStudio/feedback/details/668430/forward-declared-type-

解决kubelet报failed to get imageFs info: non-existent label \“docker-images\“

问题:一环境主机重启后,查看kubelet日志经常有大量无法回收镜像文件报错,会导致kubelet的pleg不健康,从而导致kubelet发生重启。报错如下:解决办法解决方法一:systemctlstopdockersystemctlstopkubeletsystemctlstartdockersystemctlstartkubelet解决方法二:在kubelet的kubelet.service文件中,添加如下参数:[Unit]After=docker.service原因总结:主机重启后,kubelet比docker先启动,会对不健康的pod进行一个资源回收的过程,这个时候docker还没正常

c++ - 相同的地址,多个 shared_ptr 计数器,C++ 标准是否禁止?

假设我有如下需求(这只是讨论C++标准的一些想象代码,所以我不会讨论为什么我这样设计它,所以不要打扰我这样的事情:你的设计错误。)T*ptr=newT;shared_ptrp(ptr);shared_ptrq(ptr,SomeDeleterThatDoesnotDeleteButDoSomeOtherStuff());假设逻辑保证p或它的某些拷贝比q的所有拷贝生命周期更长,那么实际上不会有任何问题。我的问题是,它是否被C++标准禁止,例如C++标准明确声明为UB,以便不同的shared_ptr计数器共享相同的地址?谢谢。 最佳答案

c++ - OSX 10.7.5 上的 node-gyp -- dyld : lazy symbol binding failed: Symbol not found

我搜索了很多,我发现最接近同一个问题的是这个(也是未回答的)问题:Symbolnotfound:_libintl_gettext我正在尝试为libpuzzle制作一个薄的C++包装器。$node--versionv0.8.18$npm--version1.2.4$node-gyp--versionv0.8.3Sourcecodeongithub正在尝试构建(我用...手动缩短了路径)$node-gypcleanconfigurebuild&&nodetest.jsgypinfoitworkedifitendswithokgypinfousingnode-gyp@0.8.3gypinfo

C++ 如何在 shared_ptr vector 中存储多种类型?

如何在std::vector中存储多个shared_ptr,每个shared_ptr都带有指向不同类型的指针?std::vectorvec;vec.push_back(make_shared(3));vec.push_back(make_shared(3.14f));是否有一个基本的多态类,我可以将其用于该任务而无需使用特定于编译器的东西? 最佳答案 有几种方法可以做到这一点。我假设您想存储各种native类型,因为您正在使用int和float。如果您的类型列表是有限的,请使用boost::variant.例如std::vector

c++ - 为什么我的 unique_ptr 认为它有一个空函数指针删除器?

这个问题在这里已经有了答案:Cannotmovestd::unique_ptrwithNULLdeletertostd::shared_ptr?(2个答案)关闭3年前。我正在尝试使用C++学习SDL。我创建了一个window.hheader和一个window.cpp源文件来存储Window类。在window.h中,它看起来像这样:ClassWindow{public:Window();...private:std::unique_ptrwindow;std::unique_ptrrenderer;...}省略了类中的一些代码。然后,在我的源文件中,在默认构造函数的定义中,我这样做:Wi

C++ 零规则 : polymorphic deletion and unique_ptr behavior

在最近overloadjournal在执行零规则主题下,作者描述了我们如何避免编写五个运算符的规则,因为编写它们的原因是:资源管理多态性缺失这两个都可以通过使用智能指针来解决。这里我特别感兴趣的是第二部分。考虑以下代码片段:classBase{public:virtualvoidFun()=0;};classDerived:publicBase{public:~Derived(){coutpB=make_shared();pB->Fun();}在这种情况下,正如文章作者所解释的那样,我们通过使用共享指针进行多态删除,这确实有效。但是如果我将shared_ptr替换为unique_ptr

c++ - 使用 operator== 时 std::set 中 unique_ptr 的深度比较

我正在尝试使用std::set将一组unique_ptr保存到我定义的自定义对象中。我在定义集合时提供了一个自定义比较函数(以启用深度比较)。在将元素插入集合时,此比较功能似乎可以正常工作,即具有相同内容的项目不会被插入两次。但是,如果我使用operator==比较两个集合,它似乎会被忽略,即具有等效元素的集合返回为不相等,而我期望(希望)它相等(因为我提供的自定义比较功能会进行深度比较)。compare函数是否只在插入时使用?如果是这样,是否有替代方法让operator==进行深度比较?感谢任何指点。谢谢:)示例代码////main.cpp//Test#include#include