c语言智能指针是什么,C ++中的智能指针

原标题:C ++中的智能指针

考虑以下带有普通指针的简单C ++代码。

MyClass *ptr = new MyClass();

ptr->doSomething();

// We must do delete(ptr) to avoid memory leak

使用智能指针,我们可以指示工作方式,我们不需要显式调用delete。智能指针是指针上的包装类,运算符如*和 - >重载。 智能指针类的对象看起来像指针,但可以执行许多事情,正常的指针不能像自动销毁(是的,我们不必显式使用删除),引用计数等等。

我们的想法是创建一个带有指针,析构函数和重载运算符(如*和 - >)的类。由于当对象超出范围时会自动调用析构函数,因此动态分配的内存将自动删除(或者引用计数可以递减)。考虑以下简单的smartPtr类。

#include

using namespace std;

class SmartPtr

{

int *ptr; // Actual pointer

public:

// Constructor: Refer https://www.geeksforgeeks.org/g-fact-93/

// for use of explicit keyword

explicit SmartPtr(int *p = NULL) { ptr = p; }

// Destructor

~SmartPtr() { delete(ptr); }

// Overloading dereferencing operator

int &operator *() { return *ptr; }

};

int main()

{

SmartPtr ptr(new int());

*ptr = 20;

cout << *ptr;

// We don't need to call delete ptr: when the object

// ptr goes out of scope, destructor for it is automatically

// called and destructor does delete ptr.

return 0;

}

输出:

20

我们可以编写一个适用于所有类型的智能指针类吗?

是的,我们可以使用模板编写通用的智能指针类。以下C ++代码演示相同。

#include

using namespace std;

// A generic smart pointer class

template

class SmartPtr

{

T *ptr; // Actual pointer

public:

// Constructor

explicit SmartPtr(T *p = NULL) { ptr = p; }

// Destructor

~SmartPtr() { delete(ptr); }

// Overloading dereferncing operator

T & operator * () { return *ptr; }

// Overloding arrow operator so that members of T can be accessed

// like a pointer (useful if T represents a class or struct or

// union type)

T * operator -> () { return ptr; }

};

int main()

{

SmartPtr ptr(new int());

*ptr = 20;

cout << *ptr;

return 0;

}

输出:

20

智能指针在管理资源时也很有用,例如文件句柄或网络套接字。

C ++库以auto_ptr,unique_ptr,shared_ptr和weak_ptr的形式提供智能指针的实现返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言智能指针是一种自动管理内存的指针,可以帮助开发人员避免内存泄漏和悬空指针等问题。但是,C语言本身并没有提供智能指针的实现,需要程序员自己手动编写。 C++智能指针是用来管理动态分配的内存的类,它们使用 RAII(资源获取即初始化)技术来确保在指针超出作用域时,内存被正确释放。C++标准库提供了两种智能指针:std::shared_ptr 和 std::unique_ptr。Boost库也提供了类似的智能指针实现。 std::shared_ptr 是基于引用计数的智能指针,它允许多个 shared_ptr 指向同一个对象。每当一个新的 shared_ptr 被创建时,其引用计数会加1,每当一个 shared_ptr 被销毁时,其引用计数会减1。当引用计数为0时,对象被自动销毁。 std::unique_ptr 是一种独占式的智能指针,它不支持拷贝和赋值操作,但支持移动语义。unique_ptr 只能有一个指向同一对象的实例,当 unique_ptr 被销毁时,它所指向的对象也会被销毁。 Boost库智能指针实现与C++标准库类似,但提供了更多的选项和扩展功能。例如,Boost库的 shared_ptr 支持自定义删除器,可以在对象销毁时执行自定义操作。此外,Boost库还提供了一些其他类型的智能指针,如 scoped_ptrintrusive_ptr 等。 总体来说,C++标准库和Boost库智能指针实现都非常强大和灵活,可以大大简化内存管理和错误处理。程序员可以根据自己的需求选择最适合的智能指针类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值