C和C++中,->运算符和.运算符都与引用类、结构和共用体的成员有关。
A.B意味着A是一个实体,是对象或者结构体,B是A的成员。A->B意味着A是一个指针,B是A的成员。
//定义一个A类,整形m_B是A的成员,创建对象m_A
class A{
public:
int B:
}m_A;
//将实例m_A中,B的值赋m_B
int m_B=m_A.B;
A* p_A = &m_A;
m_B=m_A->B;//以指针形式,访问实例m_A
可见,一个变量后面可以跟 . 运算符,一定不能跟->运算符。最近用写代码,发现在C++智能指针后面,二者都可以跟,十分有趣。
C++智能指针是一个类,用来管理动态内存,有超越new和delete的良好特性。
shared_ptr<string> p1;
能跟.运算符,说明这东西是个实体,当使用.运算符的时候,调用的是智能指针类中的方法或成员。
string *p2=p1.get();//返回智能指针中真正的指针,即指向一个字符串的指针
能跟->运算符,说明该实体有指针的功效,这是由于智能指针类重载了->运算符。同时,*运算符执行解引用功能。
if(p1->empty()){//此时,empty是string的成员
*p1=“I love huihui”;
}