指针

指针

智能指针

作用域指针(unique_ptr)

  • 超出作用域时会调用delete,销毁指针。

  • 作用域指针不能复制,因为当其中一方销毁时,指针所指向内存会被释放。

    std::unique_ptr<Entity> e1 = std::make_unique< Entity>();
    std::unique_ptr<Entity> e2 = e1;	//error
    
  • 作用域指针需要显式调用构造函数,因为其被explicit修饰。

构造一个作用域指针:

std::unique_ptr<Entity> e1 = new Entity();	//error,需显式调用
std::unique_ptr<Entity> e1(new Entity());
std::unique_ptr<Entity> e1 = std::make_unique< Entity>();	//这样更安全

共享指针(share_ptr)

  • 共享指针需分配一块叫控制块的内存用来储存引用计数。

  • 共享指针可以复制,复制给共享指针之后引用计数加一,当引用计数为0时调用delete。

  • 将一个共享指针赋值给另一个共享指针时,会增加引用计数;但把一个共享指针赋给一个弱指
    (weak_ptr)时,引用计数不会增加。

构造一个共享指针:

std::shared_ptr<Entity> e2 = std::make_shared<Entity>();

函数指针

函数指针的基本概念

指向函数的指针,可通过找到函数的地址从而直接调用函数。

创建一个变量储存函数指针:

void(*functionname) = HelloWorld;

使用函数指针:

functionname();

lambda表达式

用于定义匿名函数

lambda表达式:

auto lambda = [](int value) {std::cout << value << std::endl; };

this指针

  • this指针指向被调用的成员函数所属的对象。

  • this指针是隐含在每一个非静态成员函数内的一种指针。

  • 当形参和成员变量重名时,可以用this指针进行区分。

    Person(int age)
    {
    	this->age = age;
    }
    
  • 在类的非静态成员函数中返回对象本身,可用return *this。

    //必须返回引用,否则每次会新创建一个对象再返回,导致p2只调用了一次,之后是返回对象在调用
    Person& PersonAddPerson(Person p)
    {
    	this->age += p.age;
    	return *this;
    }
    void test01()
    {
    	Person p2(10);
    	p2.PersonAddPerson(10).PersonAddPerson(10).PersonAddPerson(10);	//链式编程思想
    	std::cout << "p2.age = " << p2.age << std::endl;
    }
    
posted @ 2025-10-13 23:48  单身喵  阅读(0)  评论(0)    收藏  举报