草庐IT

com_ptr_t

全部标签

c++ - 如何传递 unique_ptr<T> 代替原始 *output* 指针参数?

我在外部库中有一个预先存在的函数,它看起来像这样;boolCreateTheThing(MyThing*&pOut);简而言之;我给它一个原始指针(通过引用),函数分配内存并将我的指针分配给新分配的对象。当函数返回时,我有责任在我完成后释放内存。显然,我想将此结果存储到unique_ptr中,并避免使用手册delete.我可以创建一个临时原始指针以用于API调用,并将其传递到unique_ptr的构造函数中;MyThing*tempPtr;CreateTheThing(tempPtr);unique_ptrrealPtr=unique_ptr(tempPtr);还有比这更直接的方法吗?

c++ - 为什么类 std::weak_ptr 没有运算符 <?

这个问题在这里已经有了答案:HowcanIuseastd::mapwithstd::weak_ptraskey?(2个答案)关闭4年前。我在map中使用弱指针作为键。然而,当我尝试编译时,我得到了丑陋的消息,我将其解释为我缺少std::weak_ptr的比较运算符,这显然是std::map所必需的,因为它根据以下命令对其元素进行排序键值。但是,现在weak_ptr类是一个智能指针类型类,因此可以使用指向某些托管数据的指针。这个类不提供operator在这里,您的见解将不胜感激。感谢期待。

c++ - 初始化 boost::scoped_ptr 数组的正确方法?

我有一个类,其中有一个范围指针数组,这些指针指向没有默认构造函数的对象。我发现“初始化”它们的唯一方法是像这样使用swap():classBar{Bar(char*message){};}classFoo{boost::scoped_ptrarr[2];Foo(){arr[0].swap(boost::scoped_ptr(newBar("ABC")));arr[1].swap(boost::scoped_ptr(newBar("DEF")));};}这感觉有点冗长和笨拙。我错过了更聪明的方法吗? 最佳答案 arr[0].reset

c++ - 如何在 C++ 中使用带有 LoadLibrary 的 COM DLL

首先,COM对我来说就像黑魔法。但是我需要在我正在处理的一个项目中使用COMdll。所以,我有一个正在开发的DLL,我需要一些在单独的COMDLL中可用的功能。当我查看带有Depends.exe的COMDLL时,我看到了DllGetClassObject()等方法和其他函数,但没有我感兴趣的函数。我可以访问COMDLL(遗留)源代码,但它一团糟,我宁愿使用二进制形式的COMDLL,就像一个不知道里面发生了什么的大黑盒子。那么,如何使用LoadLibrary从我的代码中调用COMDLL函数?可能吗?如果是,您能否举例说明如何操作?我正在为这个项目使用VisualStudio6。非常感谢!

c++ - 这是在 C++11 中使用 unique_ptr 和移动语义实现 pimpl 的正确方法吗

我还没有看到同时使用unique_ptr和移动语义的pimpl示例。我想向STL派生容器添加一个CHelper类,并使用pimpl隐藏CHelper的功能。这样看起来对吗?派生.hclassCDerived:publicset,publicCHelper{//...};`Helper.h//derivedcontainersneedtosupportbothcopyandmove,soCHelperdoestooclassCHelper{private:classimpl;unique_ptrpimpl;public://---default:needbothcotr&cotr(com

c# - 如何通过 COM 公开可空类型

我已经为这个问题苦苦挣扎了一天半,希望有人能帮助我。假设我在C#中有这样的结构:publicstructPart{publicdouble?x;//orSystem.Nullablex,doesn'treallymatter}(这些结构表示数据库表,从Linq转换为由SQLMetal创建的SQL代码)我需要能够向COM公开这些包含可空类型的结构,以便它们可以在另一个应用程序(C++)中使用。但我无法弄清楚,对于我的生活,如何做到这一点。我想我可以创建类来封装可为null的类型:publicclassNullableDouble{privatedouble_Value;//classme

c++ - 与普通指针相比,按值传递 `unique_ptr` 是否会降低性能?

Commonwisdomisthatstd::unique_ptrdoesnotintroduceaperformancepenalty(andnotamemorypenaltywhennotusingadeleterparameter),但我最近偶然发现了一个讨论,该讨论表明它实际上引入了一个额外的间接寻址,因为unique_ptr无法在具有ItaniumABI的平台上的寄存器中传递。发布的示例类似于#includeintfoo(std::unique_ptru){return*u;}intboo(int*i){return*i;}Whichgeneratesanadditional

SpringBoot出错:Consider defining a bean of type ‘com.mapper.UserMapper’找不到该bean.

com.xxxxx.service.tour.impl.ValuationServiceImpl中的valuationMapper需要一个类型为“com.xxxxx.mapper.evaluation.ValueionMapper”的bean,但找不到该bean。分析:1、确认是否存在ValueionMapper接口的实现类,并且实现类被正确注入到valuationMapper属性中。2、检查Mapper接口的扫描配置,确保包路径正确,能够扫描到com.xxxxx.mapper.evaluation包下的Mapper接口。3、确认Mapper接口的命名与实现类的命名是否匹配。1、配置Mybat

c++ - 从 unique_ptr<T[]> 初始化 shared_ptr<T>

[跟进this问题]最近我一直在处理指向C风格数组的智能指针。我最终完成了推荐的事情并改为使用指向vector的智能指针,但在那段时间里,我得到了一些建议:不要使用shared_ptr对象来管理最初使用make_unique创建的数组因为它不会调用delete[]而是delete.这对我来说似乎不合逻辑,我检查了两个Coliru和标准:这段代码:#include#includeintmain(){std::coutmyUnique(customArrayAllocator(4),customArrayDeleter);std::coutmyShared=std::move(myUniq

c++ - 具有自定义删除器的 unique_ptr 构造函数被删除

这个例子在gcc4.8.3下编译和运行良好:#include#include#includeintmain(){autostr=newconstchar[6]{'h','e','l','l','o','\0'};std::unique_ptr>u_ptr(str,[](constchar*s){delete[]s;});std::cout但是当我尝试使用VisualStudioProfessional2013时,它无法编译(提示函数已删除)。这在VisualStudio2013中还不可能吗?还是我的示例代码有误而gcc忽略了我的错误?错误是:main.cpp(8):errorC2280