草庐IT

users_email_unique

全部标签

c++ - 在公共(public)成员函数中返回私有(private) unique_ptr

考虑以下类原型(prototype):classObjHandler{std::unique_ptrGetPtr(){returnobj;}private:std::unique_ptrobj;};这会生成一个编译时错误,说明std::unique_ptr的复制构造函数已被删除。为什么这里不应用移动语义?是否与GetPtr()不拥有obj指针有关?我应该如何实现我的代码(我需要一个成员函数以最小的开销返回一个指向流的拥有指针)? 最佳答案 unique实际上意味着“独特的所有权”。创建所有权的拷贝是没有意义的,因为那样它就不再是唯一

c++ - std::move(std::unique_ptr()) 组合是否有标准缩写?

我终于要将我的代码库迁移到C++11,这会产生更短更好的代码。但是我发现当我用一个新的指针调用函数时,它比以前长了很多:voidaddCallback(Callback*);//Takesownershipofcallback.//...addCallback(newCallback);//Clear.成为voidaddCallback(std::unique_ptr);//Nocommentneedednow!//...addCallback(std::move(std::unique_ptr(newCallback)));//bleh.提议的make_unique()模板函数只会在

c++ - unique_ptr 释放会导致内存泄漏吗?

我对unique_ptr.release()感到困惑。我的目标是投出一个unique_ptr基类到派生类的unique_ptr。所以我找到了这个question答案是Derived*tmp=dynamic_cast(basePointer.get());std::unique_ptrderivedPointer;if(tmp!=nullptr){basePointer.release();derivedPointer.reset(tmp);}或std::unique_ptrderivedPointer(static_cast(basePointer.release()));然后我想知道

c++ - 多重继承和unique_ptr销毁

我有经典的(可能有问题的)多重继承菱形方案。B继承了AC继承了AD继承了C和B我想要一个std::vector可以包含C或D对象,所以我将其设为std::vector这是D爸爸和它工作正常。但是当我使用:std::vector>然后我在破坏vector时出现段错误。**glibcdetected***./a.out:free():invalidpointer:0x0000000009948018***为什么会有差异?对我来说,即使是第一次实现也是有问题的。代码#include#include#includeclassA{public:A()=default;};classB:publi

c++ - 在工厂中返回 unique_ptr

也许这是一个简单的问题,因为我对C++还是个新手。我想使用某种工厂来封装我的应用程序中的日志记录。这个想法是只有工厂知道哪个具体类将处理函数调用。应用程序将始终调用基本日志记录类的抽象接口(interface)。工厂方法应该是这样的:std::unique_ptrFactory::getDefaultLogger(conststd::string¶m){returnnewConcreteLoggingClass(param);}ConcreteLoggingClass是AbstractLoggingClass的子类。但是我得到以下错误:Error:couldnotconvert

c++ - 是否保证 std::unique_ptr 删除顺序?

我正在制作一个控制我的应用程序的全局单例,我希望子系统以特定顺序启动和关闭。classApp{public:App();~App();voidstart();voidrun();voidshutdown();private:std::unique_ptrdisplayManager;std::unique_ptrrenderer;};构造函数以正确的顺序创建指针App::App(){displayManager=std::unique_ptr(newDisplayManager);renderer=std::unique_ptr(newRenderer);}并且我希望以相反的顺序释放u

c++ - unique_ptr 的取消引用运算符在 Eclipse 中不起作用

按照thispost中的步骤操作后我设法让Eclipse(Indigo)识别unique_ptr(和其他C++11新东西)。问题是operator->forunique_ptr似乎在Eclipse中不受支持。这里有一个例子:classFoo{voidbar(){/*...*/}};std::unique_ptrfoo;(*foo).bar();//1foo->bar();//2Case1按预期工作:没有错误并且自动完成工作。然而,对于案例2,Eclipse将语句标记为错误(“无法解析方法'bar'”),而且foo->的自动完成功能不起作用。最有趣的是,我对std::shared_ptr

c++11/14 make_unique std::string 的模糊重载

有人可以解释一下如何解决make_unique的模棱两可的过载警告,错误来自何处以及它的确切含义(我确实理解模棱两可的过载是什么,但我不确定为什么我会为这个特定的代码得到一个)?我使用的是c++11,因此我使用了HerbSutter推荐的模板。使用它我得到以下错误:Error4errorC2668:'make_unique':ambiguouscalltooverloadedfunction在visualstudio13中将鼠标悬停在工具提示上给我以下方法:functiontemplate"std::enable_if::value,std::unique_ptr>>::typestd

c++ - 将 unique_ptr 返回到多态类型

我试图通过从我的一些方法返回unique_ptr而不是原始指针来变得更安全。但是,在返回指向多态类型的唯一指针时,我有点困惑。我们如何返回指向派生类类型的基类类型的唯一指针?另外,作为一个不太重要的次要问题-我是否使用移动构造函数正确地从基类创建派生类?这是我的最小示例://StandardIncludes#include#include#include#include//--------------------------------------------------------------------------------------------------classBaseR

android10.0(Q) MTK 6765 user版本打开root权限

前言相比较Android8.1、9.0而言,Android10.0版本的root变得相当麻烦,10.0中引入了动态分区机制,同样的要想完全adbroot,需要fastboot解锁,然后关闭verity才能adbremount成功。我尝试和之前一样修改fstab.in.mt6765中的ro和rw初始值,容易导致无法正常开机,在这耗费了很长时间,就暂时先跳过吧,apkroot是ok的。环境名称版本Android版本10.0平台MTK6766先放一张图修改方案上面的图就不用我多说了吧,分别用了ROOT检测工具、RE文件管理器测试,只要root成功都有明显的提示,总共修改12个文件,新增3个文件,一共