smart-pointers相关内容

具有addrinfo结构的智能指针

我需要处理两个结构 addrinfo 指针。由于我使用C ++(11)进行编码,因此必须使我的代码具有异常安全性。确实,我的构造函数可能会抛出 runtime_error 。 当您不再需要这种结构时,应调用 freeaddrinfo 以便释放结构中的列表。请考虑以下代码: #include #include class SomeOther ..
发布时间:2020-09-27 22:13:08 其他开发

使用std :: unique_ptr管理COM对象

我正在尝试使用智能指针将COM对象保留在我的班级中,同时避免使用ComPtr。 我对智能指针还是很陌生,到目前为止,我有点困惑。请考虑以下简化代码: class Texture { private: struct ComDeleter { operator()(IUnknown * p) { p.Release(); 删除p; } } ID3D11Te ..
发布时间:2020-09-27 21:52:20 C/C++开发

包装RAII的C分配

我从库中获得了这些普通的C函数: struct SAlloc; SAlloc * new_salloc(); void free_salloc(SAlloc * s); 有什么方法可以用C ++将其包装到智能指针(std :: unique_ptr),还是RAII包装器? 我主要是对标准库的可能性感到好奇,而没有创建自己的包装器/类。 解决方案 ..
发布时间:2020-09-27 21:51:20 C/C++开发

使用智能指针实现容器

好吧,所以每个人都知道应该避免像瘟疫一样避免使用原始指针,而应该使用智能指针,但是这种建议在实现容器时是否适用?这是我要完成的工作: template class AVLTreeNode { public: T数据; unique_ptr左右; int高度; } Unique_ptr可以使容器函数 ..
发布时间:2020-09-27 21:23:01 C/C++开发

如果需要存储删除器,unique_ptr如何没有开销?

首先看看C ++ Primer关于 unique_ptr 和 shared_ptr 的内容: 16.1.6美元。效率和灵活性 我们可以确定 shared_ptr 不成立将该删除器作为直接成员,因为该删除器的类型直到运行时才知道。 因为该删除器的类型是 unique_ptr ,删除成员的类型在编译时是已知的。 删除程序可以直接存储在每个 unique_ptr 对象中。 因此, ..
发布时间:2020-09-27 20:37:16 C/C++开发

如何只为类强制智能指针实例?

我一直在努力防止用户使用没有智能指针的类。因此,强制它们具有由智能指针分配和管理的对象堆。 为了获得这样的结果,我尝试了以下操作: #include< ; memory> class A { private: 〜A {} // //仅在std :: unique_ptr 朋友std ::强制使用A default_delete ..
发布时间:2020-09-27 20:18:13 C/C++开发

为继承enable_shared_from_this的类获取unique_ptr

通常,我更喜欢从工厂返回 unique_ptr 。 最近,我遇到了一个问题,即为继承 enable_shared_from_this 的类返回 unique_ptr 。此类的用户可能会意外地调用 shared_from_this(),尽管该调用不属于任何 shared_ptr ,结果带有 std :: bad_weak_ptr 异常(或直到C ++ 17之前未定义的行为,通常作为异常来实现)。 ..
发布时间:2020-09-27 19:05:19 C/C++开发

为类成员使用智能指针

我无法理解C ++ 11中智能指针作为类成员的用法。我已经阅读了很多有关智能指针的文章,我想我确实理解 unique_ptr 和 shared_ptr / weak_ptr 通常可以正常工作。我不了解实际用途。似乎每个人都建议使用 unique_ptr 作为几乎所有时间的方式。但是我将如何实现这样的东西: class Device { }; 类别设置{ Device * devic ..
发布时间:2020-09-27 18:45:41 C/C++开发

创建shared_ptr来堆叠对象

在我的方法中,创建了一个Player对象,如下所示: Player player(fullName,age); 我的老师给了我们一段代码,其中包含一个将shared_ptr用作播放器对象的构造函数。 / p> // 类的构造函数SomeClass(const std :: shared_ptr客户端,std :: shared_ptr ..
发布时间:2020-09-27 18:37:11 C/C++开发

共享的空指针。为什么这样做?

要解决我的应用程序中一个非常特殊的问题,我需要一个共享指针来分配数据,但对于外部世界,底层数据类型应保持隐藏。 我可以通过创建某种我所有其他类都可以继承的Root类来解决此问题,并在此Root类上使用shared_ptr,如下所示: std :: shared_ptr 但是: 我不希望我的所有类都可以从这个Root类继承而来,只是要具有 ..
发布时间:2020-09-27 02:57:36 C/C++开发

如何将Deleter传递给make_shared?

从C ++ 11开始,由于多种原因,开发人员倾向于将智能指针类用于动态生命周期对象。对于这些新的智能指针类,标准甚至建议不要使用 new 这样的运算符,而是建议使用 make_shared 或 make_unique 可以避免某些错误。 如果我们想使用智能指针类,例如 shared_ptr ,我们可以构造一个类似的 shared_ptr p(新int(12)); ..
发布时间:2020-09-27 02:19:58 C/C++开发