首页 > TAG信息列表 > smart-pointers

c-带Swig的auto_ptr

我正在尝试包装使用auto_ptr的C库.我在喝酒 并希望生成python绑定.我看过swig文档中有关如何将swig与智能指针here一起使用的部分.但是我无法使其工作. Swig生成想要使用const初始化auto_ptr的代码参考,但auto_ptr使用非常量定义了复制构造函数参考例如auto_ptr(auto_ptr&).产生的

c-cpp make_shared用于无效指针

我想使用std :: make_shared创建一个空指针.由于make_shared应该比shared_ptr(new T)快,并且可以保存异常,所以我想知道是否有一个库函数以make_shared的方式创建shared_ptr(new foo).解决方法:您可以转换任何shared_ptr< foo>到shared_ptr< void>在不损失与make_shared相关联的效

c – – >智能指针中的用法

我有一个简单的智能指针实现,如下面的代码片段1所示.在第二个片段中有一个名为Dummy的虚拟测试类.代码片段3显示了我们如何利用这个简单的智能指针来访问函数foo(). 我的问题是关于我们使用 – >调用Dummy类中的函数foo()的方式.操作符. – &GT operator已经返回指向原始指针的指针

c – 如何实现observer_ptr?

我想在我的项目中使用observer_ptr,但paper只定义了接口,而不是完整的实现. 有没有一种简单的方法可以自己实现它?解决方法:您可以通过创建带有NOP删除器的unique_ptr来轻松创建所谓的observer_ptr. template<typename T> struct nop_deleter { void operator()(T*) const {} };

c – 使用shared_ptr获得独特的所有权(种类) – 这是一种好的做法吗?

这很难解释,但我会尽我所能.所以,我有一个RenderComponent,EventManager和RenderSystem.在我的RenderComponents构造函数中,我引发了RenderSystem订阅的renderComponentCreated事件.使用event args对象,我传递一个RenderNode作为数据,其中包含renderSystem绘制事物所需的信息(drawa

c – 如何使用weak_ptr中断shared_ptr循环引用

我已经读过weak_pointers可以用来打破循环引用. 请考虑以下循环引用示例 struct A { boost::shared_ptr<A> shrd_ptr; }; boost::shared_ptr<A> ptr_A(boost::make_shared<A>()); boost::shared_ptr<A> ptr_b(boost::make_shared<A>()); ptr_A->shrd_ptr = ptr_b; p

是否可以将C智能指针与C的malloc一起使用?

我的一些代码仍然使用malloc而不是new.原因是因为我害怕使用new,因为它抛出异常,而不是返回NULL,我可以轻松检查.在try {} catch(){}中包含对new的每个调用也看起来不那么好.而当使用malloc我可以做if(!new_mem){/ *句柄错误* /}. 所以我有一个问题.我可以和malloc一起使用智能指针

c – unique_ptr和OpenSSL的STACK_OF(X509)*

我使用一些using语句和unique_ptr来使用OpenSSL,如suggested in another question.没有,代码变得非常难看,我不是很喜欢goto语句. 到目前为止,我已尽可能地更改了我的代码.以下是我使用的示例: using BIO_ptr = std::unique_ptr<BIO, decltype(&::BIO_free)>; using X509_ptr = std

c – 使用智能指针返回类型协方差

在C中我们可以这样做: struct Base { virtual Base* Clone() const { ... } virtual ~Base(){} }; struct Derived : Base { virtual Derived* Clone() const {...} //overrides Base::Clone }; 但是,以下内容不会做同样的伎俩: struct Base { virtual shared_ptr<Ba

c – 使用new的std :: make_unique和std :: unique_ptr之间的差异

std :: make_unique是否具有std :: make_shared等效率优势? 与手动构建std :: unique_ptr相比: std::make_unique<int>(1); // vs std::unique_ptr<int>(new int(1)); 解决方法:make_unique背后的动机主要有两个方面: > make_unique对于创建临时对象是安全的,而在明确使用ne

c – 什么是智能指针,什么时候应该使用?

什么是智能指针,什么时候应该使用?解决方法:UPDATE 这个答案相当陈旧,因此描述了当时的“好”,这是Boost库提供的智能指针.从C 11开始,标准库提供了足够的智能指针类型,因此您应该支持使用std::unique_ptr,std::shared_ptr和std::weak_ptr. 还有std::auto_ptr.它非常像一个范围指针,

c – std :: unique指针和自定义lambda删除器错误

我试图使用std :: unique_pointer并提供自定义lambda删除器,但我收到语法错误: cannot convert from 'wmain::<lambda_0f8f736f48c52ca6fa24492e7c0c1ec0>' to 'const std::default_delete<_Ty>' 使用以下简单的最小代码: #include <memory> class TestClass { }; t

c – boost :: make_shared值是初始化还是默认初始化数组?

我需要不断地将unsigned char的共享数组作为原始缓冲区分配,以保存来自TCP流的数据,然后将其传递给其他几个线程进行处理.我的问题是,boost :: make_shared< T []>(std :: size_t)值是否初始化或默认初始化基础数组?由于频率很高(每秒约十次),前者的开销太大.我尝试查看源代码,但是

c – weak_ptr在shared_ptr中的作用

我理解shared_ptr如何工作,除了weak_ptr的角色.我理解它在那里检测循环引用时引用计数不为零,但除此之外,我不明白它究竟是如何做到的.它有什么作用?解决方法:另见:When is std::weak_ptr useful?为什么,How does weak_ptr work?为何. 我将举例说明我如何使用它,虽然我掀起的示例代码

c – 哪个共享指针应该是环或循环中的弱指针

如果我们有一个父类,它引用了一个子类(共享指针),而且子类也有一个对父类的引用(再次使用共享指针),我们必须使这两个智能指针中的一个成为弱指针. 但是我们如何决定这两个指针中的哪一个应该是弱指针呢? 此外,当弱指针指向0(当共享计数为0时),当我们可能仍需要访问它时,是否删除了

c – 如何使用模板化构造函数调用make_shared或make_unique

如何在具有模板化构造函数的类上调用make_shared或make_unique?这是一个例子: class A { /// constructor shared ptr A(shared_ptr<X> x) ... /// constructor that creates new shared ptr template <class T> A() : A(make_shared<T>(...)) {} }; make_shared

c – 编译时make_unique错误

参见英文答案 > using c++ aggregate initialization in std::make_shared                                    1个 我刚刚开始学习智能指针stl::make_unique 必须将旧代码更改为现代c 编译下面的代码行时,我收到以下错误(原始代码示例) #in

c – 将构造函数中动态分配的数组分配给唯一的智能指针成员变量

在下面的例子中,我有一个智能指针sp作为成员变量,我想在构造函数中为它分配一个动态分配的数组,但是我得到一个编译器错误,不匹配’operator =’,正确的方法是什么做这个? 在下面的例子中,我有一个智能指针sp作为成员变量,我想在构造函数中为它分配一个动态分配的数组,使用智能指针

c – 库函数返回原始指针,我想使用智能指针

我有这种情况,我使用的库有很多函数返回对象的原始指针,我怎么能在程序中使用boost智能指针使用这个库并使用智能指针? 该库是xerces-C,一个例子是获取文档迭代器: boost::shared_ptr<DOMNodeIterator> itera = document->createNodeIterator(rootelement, DOMNodeFilter::SHOW_ALL,

c – 一个新的通用指针any_ptr(现在为dumb_ptr),使代码在智能指针中更具可重用性

我最近一直在使用很多不同的boost智能指针,以及普通的指针.我注意到,随着您的开发,您倾向于意识到您必须切换指针类型和内存管理机制,因为您忽略了一些循环依赖或某些小烦人的事情.当发生这种情况并且你改变你的指针类型时,你必须去改变一大堆你的方法签名来采用新的指针类型,或者

c – 双指针函数参数和CComPtr

我不确定在一个函数中使用CComPtr的方法,该函数有一个表示为双指针的参数: HRESULT D3DPresentEngine::CreateD3DSample( IDirect3DSwapChain9 *pSwapChain, IMFSample **ppVideoSample ) { // Caller holds the object lock. D3DCOLOR clrBlack = D3DCOLOR_

C 11智能指针使用案例

我们假设我正在开发一个小型电影数据库.在像python这样的动态语言中,我写道: db = ConnectionFactory.get_connection(db_name) # (1) Create database connection model = MovieModel(db) # (2) object-to-relational mapper star_wars = Movie("Star War

c – valgrind和std :: unique_ptr – 假阳性与否?

我试图理解现代C中智能指针的使用,我写了一个小的,简单的程序来测试valgrind.问题是以下示例: #include <iostream> #include <memory> class Base { private: virtual double meth_1( double x ) const = 0; virtual void meth_2( int y ) const = 0; pr

c – SDL类型的智能指针包装是否安全?

我想过使用类似下面这样的东西,所以我不必记得在方法结束时显式调用驱逐舰函数: #include <iostream> #include <SDL2/SDL.h> #include <memory> int main() { SDL_Init(SDL_INIT_VIDEO); std::unique_ptr<SDL_Window, decltype((SDL_DestroyWindow))> win { SDL

理解c共享指针

嗨我正在制作我自己的引用计数智能指针,但在我开始之前有两个概念我不太明白. >当我创建一个共享指针指向一个对象时,我必须为一个结构/类分配内存,该结构/类将包含诸如引用计数(最初为一个)之类的信息,也可能是一个互斥量以及递增和递减.当我使用时,假设=运算符使另一个共享指针也