c++自定义指针类型、*和->运算符重载

原创 2018年04月17日 09:57:35
#include<iostream>
#include<memory>
using namespace std;

class A
{
public:
A(int id)
{
this->id = id;
cout<<"A(int)"<<endl;
}
~A()
{
cout<<"~A()"<<endl;
}
void print()
{
cout<<this->id<<endl;
}

private:
int id;
};

class Ptr
{
public:
//传入一个对象的指针
Ptr(A *ptr)
{
this->ptr = ptr;
}
//匿名对象周期完毕自动释放
~Ptr()
{
if(this->ptr!=NULL)
{
delete this-> ptr;
this->ptr = NULL;
cout<<"auto delete"<<endl;
}
}
//返回的是一个对象指针
A* operator->()
{
return this->ptr;
}1
//*p返回的就是对象
A& operator*()
{
//类中的ptr已经被初始化为A
return *(this->ptr);
}

private:
A *ptr;
};

void test_auto_ptr()
{
//special grammer
//匿名对象完成功能后,会自动调用类A的析构函数
auto_ptr<A> ptr(new A(11));
ptr->print();
}

void test()
{
//A *a = new A(10);//这种简单的不delete会造成内存泄露
Ptr ptr(new A(12));
ptr->print();
(*ptr).print();
}

int main(void)
{
test();
cout<<"===="<<endl;
test_auto_ptr();

return 0;
}



版权声明: https://blog.csdn.net/hiudawn/article/details/79970452

重载指针运算符

#include #include using namespace std; //指针间接引用运算符一定是一个成员函数。它有着额外的,非典型的限制:它必须返回一个对象(或引用),该对象也有一个指针...
  • h1023417614
  • h1023417614
  • 2013-11-03 19:12:14
  • 3316

C++ 重载操作符之一(指针运算符*,->)

//重载指针运算符*,-> #include using namespace std; template class MyPtr { private: T * m_ptr; public: ...
  • u014338577
  • u014338577
  • 2015-09-06 23:24:03
  • 2620

含有指针成员时的赋值运算符重载

如果类封装了原始指针,如下面这个类:class MyString { private: char* Buffer;public: // constructor MyString(co...
  • q__y__L
  • q__y__L
  • 2016-04-12 21:26:31
  • 999

C++自定义数据类型之指针

好像这方面的知识理解起来很费劲儿,看了三四遍了吧,还是模模糊糊的,没有条理性,所以就开始翻看博客里这方面的内容,可能是看的少吧,还是不能让我彻底的明白,因此就度娘了一下,看了几篇关于指针的文章,觉得有...
  • erlian1992
  • erlian1992
  • 2015-02-15 18:37:11
  • 1647

C++运算符重载(10) - 智能指针

下面是一个使用普通指针的简单例子:     MyClass *ptr = new MyClass();     ptr->doSomething();     //必须手动释放ptr,避免内存泄漏 ...
  • shltsh
  • shltsh
  • 2015-05-27 00:05:00
  • 829

C++中运算符重载

概述:运算符重载是C++多态的重要实现手段之一。一般而言,对于双目运算符,最好将其重载为友元函数;而对于单目运算符,则最好重载为成员函数。但是一定要记得其中的例外情况。 运算符重载的四项基本原则...
  • qianhen123
  • qianhen123
  • 2014-07-06 21:17:04
  • 1004

C++运算符重载(3) - 什么时候需要自定义赋值操作符

答案与拷贝构造函数一样。如果一个类不包含指针,则不需要自定义赋值操作符与拷贝构造函数。编译器会给每个类创建一个默认的拷贝构造函数和默认的赋值操作符。但是,当类中包含有指针或任何运行时分配的资源时,编译...
  • shltsh
  • shltsh
  • 2015-05-26 09:32:52
  • 1249

c++运算符重载练习

//全局函数和静态函数的转换 #include using namespace std; class Test { public: Test(int a = 0, int b = 0) { ...
  • lishuhuakai
  • lishuhuakai
  • 2015-05-23 00:25:50
  • 1396

【c/c++】类型转换函数(类型转换运算符重载函数)

用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。 C++提供类型转换函数(ty...
  • lzm18064126848
  • lzm18064126848
  • 2016-01-04 18:09:10
  • 3512

个人对C++运算符重载返回类型的认识

虽然还是大一,但为了应对计算机等级考试...我看了近半个学期的C++...其中有不少不很明了的地方...比如运算符重载返回类型的问题...在这里归纳一下...主要写下返回类型的问题.1)返回引用:  ...
  • lr1985
  • lr1985
  • 2007-05-01 20:29:00
  • 726
收藏助手
不良信息举报
您举报文章:c++自定义指针类型、*和->运算符重载
举报原因:
原因补充:

(最多只允许输入30个字)