C++ - 箭头运算符

C++ 学习笔记

C++ 中的箭头运算符

简介

  • 本篇将讨论箭头运算符
  • both in class & struct

用法1

  • 箭头函数最通常的用法就是用于 object 调用其函数/共有变量、
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <string>
    #include <iostream>

    class Entity
    {
    public:
    void Print() const { std::cout << "Hello!" << std::endl;}
    };

    // 程序的主函数
    int main()
    {
    Entity e;
    e.Print();

    Entity* e1 = new Entity(); // 指针调用函数,需要使用到箭头函数
    e1->Print();

    delete e1;
    return 0;
    }

重载箭头运算符

  • ScopePtr 的析构函数中会删除 Entity,相当于一个智能指针
  • 如果不使用运算符重载的话,可能需要写一个 GetEntity 方法来返回 ScopePtr 中的 Entity 指针
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <string>
#include <iostream>

class Entity
{
public:
void Print() const { std::cout << "Hello!" << std::endl;}
};

class ScopePtr
{
private:
Entity* obj;

public:
ScopePtr(Entity* e)
: obj(e) {}

~ScopePtr()
{
delete obj;
}

Entity* operator->()
{
return obj;
}

const Entity* operator->() const
{
return obj;
}
};


// 程序的主函数
int main()
{
Entity e;
e.Print();

Entity* e1 = new Entity(); // 指针调用函数,需要使用到箭头函数
e1->Print();
delete e1;

const ScopePtr ptr = new Entity;
ptr->Print();

ScopePtr ptr1 = new Entity;
ptr1->Print();

return 0;
}