这里主要是练习一下操作符重载。
1、什么是智能指针从比较简单的层面来看,智能指针是RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制对普通指针进行的一层封装。这样使得智能指针的行为动作像一个指针,本质上却是一个对象,这样可以方便管理一个对象的生命周期。
使用智能指针时要注意,在c++中,智能指针一共定义了4种:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。其中,auto_ptr 在 C++11已被摒弃,在C++17中已经移除不可用。
这里仅对auto_ptr做一个练习
2、auto_ptr有什么特点1、可以自动回收内存,2、可以直接访问指向对象的成员变量和成员函数。对于使用而言,记住这两条就够了。
3、实现自定义的智能指针MyAutoPtr#include#include #include using namespace std; //智能指针特点:1、可以自动回收内存,2、可以直接访问指向对象的成员变量和成员函数 class AA { public: AA(int a) { cout<<"AA(int a) ...."< //如下 void test_auto_ptr() { //使用模板类,指向类AA //ptr指针可以直接访问AA对象的成员变量和成员函数 auto_ptr ptr(new AA(10)); ptr->print(); //不需要delete释放,就可以自动调用AA的析构函数,释放空间 //但是正常情况下,c++的new和delete成对出现,已经变成程序员的习惯。上面的写法有点别扭 } //下面我们自己来实现一个智能指针,只针对类AA的智能指针MyAutoPtr class MyAutoPtr { public: MyAutoPtr(AA *paa) { if (paa != NULL) { m_paa = paa; } } ~MyAutoPtr() { if(m_paa != NULL) { delete m_paa; m_paa = NULL; } } //重载两种对象的访问方式 -> 和 * AA *operator->() { return m_paa; } AA &operator*() { return *m_paa; } private: AA *m_paa; }; int main(void) { //test_auto_ptr(); MyAutoPtr myptr(new AA(10)); myptr->print(); (*myptr).print(); return 0; }
这里其实缺失了一个模板类的使用,对于基本的功能是可以实现了。访问对象成员变量和成员函数的时候,注意两种使用方法,指针(->)和对象实例(.),通过操作符重载完成需求。
暑期编程PK赛 得CSDN机械键盘等精美礼品!


