C++智能指针简单案例

谁践踏了优雅 2023-07-06 06:27 117阅读 0赞

智能指针其实就是对->和*运算符重载的应用

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. class Person{
  5. public:
  6. Person(int age){
  7. cout << "有参构造函数调用" << endl;
  8. this->m_age = age;
  9. }
  10. void showAge(){
  11. cout << "年龄:" << this->m_age << endl;
  12. }
  13. ~Person(){
  14. cout << "析构函数调用" << endl;
  15. }
  16. private:
  17. int m_age;
  18. };
  19. //智能指针 用来托管new出来的对象的释放
  20. class SmartPointer{
  21. public:
  22. SmartPointer(Person* person){
  23. cout << "SmartPointer" << endl;
  24. this->person = person;
  25. }
  26. //重载指针运算符
  27. Person* operator->(){
  28. return this->person;
  29. }
  30. //重载*运算符
  31. Person& operator*(){
  32. return *this->person;
  33. }
  34. ~SmartPointer(){
  35. if(this->person != NULL){
  36. cout << "~SmartPointer" << endl;
  37. delete this->person;
  38. this->person = NULL;
  39. }
  40. }
  41. private:
  42. Person* person;
  43. };
  44. void test01(void){
  45. // Person* p = new Person(18);
  46. // delete p;
  47. SmartPointer sp = SmartPointer(new Person(18));
  48. sp->showAge(); //sp->->showAge(),编译器简化为sp->showAge()
  49. (*sp).showAge();
  50. }
  51. int main(int argc, char* argv[]){
  52. test01();
  53. system("pause");
  54. return 0;
  55. }

发表评论

表情:
评论列表 (有 0 条评论,117人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ 智能指针

    C++ 智能指针 为了更安全地使用动态对象,标准库定义了两个只能指针类型来管理动态分配的对象当一个对象应该被释放时,指向它的智能指针可以确保自动地把它释放。 理论上来

    相关 C++智能指针简单剖析

    智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智能指针的类都是栈上的对象,所以当函数(或程序)结束时会自动被释放。 1. 智能指针背后的设

    相关 C++-智能指针——简单实现分析

    > 一:为什么要有智能指针 在我们动态开辟内存时,每次new完就一定会有配套的delete来完成释放操作。可是这时候问题就来了,有时候程序未必会执行到我们释放的那一步,

    相关 C++智能指针

    1.智能指针的作用        C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说