this函数和析构函数

简介: this函数和析构函数

一、this函数


对于普通的成员函数,this指向调用该函数的对象


对于构造函数,this指向正在创建的对象


#include <iostream>
using namespace std;
class Teacher{
public:
    /*Teacher(const string& name,int age)
        :m_name(name),m_age(age){
        cout << "构造函数:" << this << endl;  
    }*/
    //通过this区分函数的形参和成员变量
    Teacher(const string& m_name,int m_age){
        this->m_name = m_name ;
        this->m_age = m_age;
    }
    void print(void){
        cout << m_name << ',' << m_age <<endl;
        cout << this->m_name << ',' <<
            this->m_age << endl;
    }/*编译处理后变成类似如下:
    void print(Teacher* this){
        cout << this->m_name << ',' <<
            this->m_age << endl;
    }*/
private:
    string m_name;
    int m_age;
};
int main(void)
{
    Teacher t1("杨健",45);
    cout << "&t1:" << &t1 << endl;
    Teacher t2("王建立",45);
    cout << "&t2:" << &t2 << endl;
    t1.print();//Teacher::print(&t1)
    t2.print();//Teacher::print(&t2)
    return 0;
}
#include <iostream>
using namespace std;
class Counter{
public:
    Counter(int count=0):m_count(count){}
    void print(void){
        cout << "计数值:" << m_count << endl;
    }
    Counter& add(void){
        ++m_count;
        //this指向调用对象
        //*this就是调用对象
        return *this;//返回自引用
    }
    void destroy(void){
        //...
        cout << "destroy:" << this << endl;
        delete this;
    }
private:
    int m_count;
};
int main(void)
{
    Counter c;
    c.add().add().add();
    c.print();//3
    Counter* pc = new Counter;
    pc->add();
    pc->print();//1
    //delete pc;
    cout << "pc:" << pc << endl;
    pc->destroy();
    return 0;
   
}
#include <iostream>
using namespace std;
class Student;
class Teacher{
public:
    void edudate(Student* s);
    void reply(const string& answer);
private:
    string m_answer;
};
class Student{
public:
    void ask(const string& question,Teacher* t);
};
void Teacher::edudate(Student* s){
    s->ask("什么是this指针?",this);
    cout << "学生回答:" << m_answer << endl;
}
void Teacher::reply(const string& answer){
    m_answer = answer;
}
void Student::ask(
    const string & question,Teacher* t){
    cout << "问题:" << question << endl;
    t->reply("不知道");
}
int main(void)
{
    Teacher t;
    Student s;
    t.edudate(&s);
    return 0;
}


二、析构函数,主要负责清理对象生命周期中的动态资源,当对象被销毁时,该类的析构函数自动被调用和执行


#include <iostream>
using namespace std;
class Integer{
public:
    Integer(int i){
        m_pi = new int;
        *m_pi = i;
    }
    ~Integer(void){
        cout << "析构函数" << endl;
        delete m_pi;
    }
    void print(void) const {
        cout << *m_pi << endl;
    }
private:
    int* m_pi;
};
int main(void)
{
    if(1){
        Integer i(100);
        i.print();//100
        cout << "test1" << endl;
        Integer* pi = new Integer(200);
        pi->print();
        delete pi;
        cout << "test3" << endl;
    }
    cout << "test2" << endl;
    return 0;
}
#include <iostream>
using namespace std;
class A{
public:
    A(void){
        cout << "A(void)" << endl;
    }
    ~A(void){
        cout << "~A(void)" << endl;
    }
};
class B{
public:
    B(void){
        cout << "B(void)" << endl;
    }
    ~B(void){
        cout << "~B(void)" << endl;
    }
    A m_a;
};
int main(void)
{
    B b;
    return 0;
}
目录
相关文章
|
7月前
|
编译器 数据库连接 C++
31析构函数
31析构函数
30 0
|
C++
析构函数
析构函数是一种特殊的函数,用于在对象的生命周期结束时清理资源。它与构造函数相反,通常用于释放在对象创建期间分配的资源(如内存、文件句柄等)。析构函数的名称通常以一个波浪线(~)开头,如 ~MyClass()。
85 6
|
6月前
|
C++ 开发者
什么是析构函数?
正确地使用析构函数是C++资源管理的关键。开发者应当确保所有资源在不再需要时能够被及时和正确地释放。通过合理设计析构函数,可以大大增强程序的稳定性和效率。希望本文的介绍能帮助你更好地理解和使用C++中的析构函数,写出更健壮、更可靠的代码。
61 0
|
6月前
|
安全 编译器 C++
C++一分钟之-构造函数与析构函数
【6月更文挑战第20天】C++中的构造函数初始化对象,析构函数负责资源清理。构造函数有默认、参数化和拷贝形式,需注意异常安全和成员初始化。析构确保资源释放,避免内存泄漏,要防止重复析构。示例代码展示了不同构造函数和析构函数的调用情况。掌握构造和析构是有效管理对象生命周期和资源的关键。
51 2
|
6月前
|
编译器 C语言 C++
【C++】:构造函数和析构函数
【C++】:构造函数和析构函数
49 0
|
7月前
|
C++
C++程序中的析构函数
C++程序中的析构函数
59 2
|
7月前
|
编译器 C++
【c++】构造函数和析构函数
【c++】构造函数和析构函数
【c++】构造函数和析构函数
|
7月前
|
编译器 C语言 C++
C++构造函数,析构函数
C++构造函数,析构函数
|
7月前
|
存储 编译器 Linux
构造函数与析构函数的问题总结
构造函数与析构函数的问题总结
69 0
|
搜索推荐 编译器 C++
【C++构造函数与析构函数】
【C++构造函数与析构函数】