草庐IT

com_ptr_t

全部标签

c++ - 比较 observer_ptr< T > 和 T *

据我所知,observer_ptr提议包括与nullptr_t的(不)平等比较和交叉类型(即observer_ptr与observer_ptr)比较。没有与原始指针的比较,这在尝试将其逐渐引入现有代码库时有点烦人。问题1:如果我添加这些运算符,您是否预见到任何严重的问题(我在不同的命名空间中使用observer_ptr的单独实现,完全按照当前提案建模,我不会将这些添加到std::observer_ptr)?跟进:如果添加运算符不是一个好主意,那么在observer_ptr上使用get()会更好吗?与原始指针进行比较,还是将原始指针显式包装为observer_ptr会更好??编辑:显然不

c++ - 一个 std::shared_ptr<> 的 std::tuple<> 不起作用?

我最近发现使用std::tuple有问题只有一个元素。我创建了一个用于类型删除并保留N个引用计数对象的类。但是,如果引用计数对象是std::tuple中唯一的一个,则不会保留它。.我做错了什么吗?classtoken{public:templatetoken(Types...types):_self(std::make_shared>(std::make_tuple(std::move(types)...))){}//WhydoIneedthisspecialversionoftheconstructor?//Uncommentandthecodewillwork!//template

c++ - std::shared_ptr<std::string const> 能否作为引用计数不可变字符串的有效实现?

理想情况下,不可变字符串类只需要为每个字符串分配一个内存。甚至引用计数也可以存储在与字符串本身相同的内存块中。string的简单实现和shared_ptr将为shared_ptr分配三block不同的内存:字符串缓冲区的内存字符串对象的内存引用计数的内存现在,我知道在使用std::make_shared()时,智能实现可以将最后两个组合成一个分配。但这仍然会留下两个分配。当您知道字符串是不可变的时,字符串缓冲区将不会被重新分配,因此应该可以将它与字符串对象集成在一起,只留下一次分配。我知道一些字符串实现已经对短字符串使用了这样的优化,但我正在寻找一个不管字符串长度如何都这样做的实现。我

c++ - 带有标准容器的 std::shared_ptr

我有一个容器shared_ptrs和我将这些对象交给WindowsAPI,稍后我使用原始ptr获得回调。我要找对shared_ptr事后。这可以用shared_ptr干净地完成吗?(不使用shared_from_this())。非常基本的例子:classCFoo{};typedefstd::shared_ptrCFooPtr;typedefstd::setCFooSet;externCFooSetm_gSet;voidSomeWindowsCallBack(CFoo*pRawPtr){m_gSet.erase(pRawPtr);}我知道这可以用intrusive_ptr来完成很容易,但

C++ COM : Common mistakes

我不得不再次沉浸在C++COM编程中,并且忘记了上次的大部分辛苦教训。(当我认为“再也不会”这个短语可能被错误使用时。)用C++开发COM最常见的错误和反模式有哪些?我正在使用BorlandC++Builder,但我追求的是适用于所有C++编译器的东西。 最佳答案 我的错误是没有阅读手册。我只是试图通过使用在线找到的教程和代码示例来获得。如果我对COM有很好的基本了解,我会在这些本来很容易解决的问题上浪费很多时间。 关于C++COM:Commonmistakes,我们在StackOver

c# - C# 中的反射不适用于 COM(和 C++)

首先:我是COM的初学者。我在团队中从事大型项目。服务器部分是用C++编写的。客户端是用C#编写的。它们通过COM进行通信。现在-我在C#中有接口(interface)IA。我有对象o,其类型是类A(在C++中实现IA-它以某种方式通过COM传输)。我想使用反射来获取该类型的所有属性,但它无法正常工作。它只返回我在代码中使用的那些属性。这是检索属性的反射代码:Type[]ifaces=typeof(A).GetIterfaces();foreach(Typeifaceinifaces){foreach(PropertyInfoinfoiniface.GetProperties()){/

c++ - COM 互操作 : how to use ICustomMarshaler to call 3rd party component

我想使用COM互操作从C#调用COM组件中的方法。这是方法签名:longGetPrecursorInfoFromScanNum(longnScanNumber,LPVARIANTpvarPrecursorInfos,LPLONGpnArraySize)这是在C++中调用它的示例代码(我检查过它确实有效):structPrecursorInfo{doubledIsolationMass;doubledMonoIsoMass;longnChargeState;longnScanNumber;};voidCTestOCXDlg::OnOpenParentScansOcx(){VARIANTv

c++ - 如何重新分配 boost shared_ptr

我有两个Boostshared_ptrshared_ptrA(newX);shared_ptrB(newX);第三个指针最初指向与A相同的X。shared_ptrC=A;更改C使其指向与B相同的X的正确方法是什么?C=B; 最佳答案 EdChm是对的。我做了一个小测试程序来明确它。它使用C++11,但可以轻松转置。#include#includeintmain(){std::shared_ptrA(newint(1));//createsasharedpointerpointingtoanint.Soheunderlyinginti

c++ - WinRT/Metro 风格应用程序中基于 ATL 的 COM 对象

场景:我正在尝试将C++应用程序迁移到WinRT/MetroStyle。此应用程序使用ATL/COM对象,该对象通过类IDispatchImpl实现IDispatch接口(interface)但是,根据MSDNIDispatchImpl不适用于MetroStyle应用程序。我的ATL/COM类如下所示:classMyATLClass:publicIDispatchImpl,publicCComObjectRoot,publicCComCoClass{...}问题:WinRT中是否有IDispatchImpl的替代品?例如,替换可能涉及派生自不同的类并丢弃我的IDL文件。我的最终目标只是

java - 将 std::unique_ptr 传递给 JNI

我正在用JNI包装一些C++代码,偶然发现了以下工厂函数:std::unique_ptrcreate_metric_planner(*arguments*)我需要将此函数创建的规划器的引用传递回Java以供以后使用,但我很困惑a)如何将其传回,以及b)一旦它被传递下去会发生什么。通常情况下,我都是这样过去的:Director*DIRECTOR=newDirector(arguments);return(jlong)DIRECTOR;它的效果非常好。有人可以解释当使用返回此类指针的工厂函数而不是普通构造函数时使用JNI引用对象的类似过程吗? 最佳答案