MST

星途 面试题库

面试题:C++ 中this指针在成员函数调用与对象生命周期中的表现

当一个对象的成员函数被调用时,this指针是如何在对象的生命周期内发挥作用的?如果对象被动态分配(例如使用new关键字),this指针在对象释放(delete)时会有怎样的变化?请结合代码示例说明。
45.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. this指针在对象生命周期内的作用
    • 在C++中,当对象的成员函数被调用时,this指针是一个隐含的指针,它指向调用该成员函数的对象。通过this指针,成员函数可以访问对象的成员变量和其他成员函数。
    • 例如:
#include <iostream>

class MyClass {
private:
    int data;
public:
    MyClass(int value) : data(value) {}
    void printData() {
        std::cout << "The data value is: " << this->data << std::endl;
    }
};

int main() {
    MyClass obj(10);
    obj.printData();
    return 0;
}
  • 在上述代码中,printData函数通过this指针访问了对象obj的私有成员变量data。当obj.printData()被调用时,this指针指向obj,所以this->data就是obj.data
  1. 对象动态分配时this指针在释放时的变化
    • 当对象使用new关键字动态分配内存时,this指针在对象的整个生命周期内正常工作,指向动态分配的对象。
    • 当使用delete释放对象时,对象的内存被回收,this指针所指向的内存不再有效。
    • 例如:
#include <iostream>

class MyClass {
private:
    int data;
public:
    MyClass(int value) : data(value) {}
    ~MyClass() {
        std::cout << "Object with data " << data << " is being destroyed." << std::endl;
    }
    void printData() {
        std::cout << "The data value is: " << this->data << std::endl;
    }
};

int main() {
    MyClass* ptr = new MyClass(20);
    ptr->printData();
    delete ptr;
    // 此时ptr所指向的对象已被释放,this指针指向的内存无效
    // 如果再次访问ptr->printData()会导致未定义行为
    return 0;
}
  • 在上述代码中,ptr是一个指向动态分配的MyClass对象的指针。在delete ptr之后,this指针所指向的对象内存被释放,再访问该对象的成员函数或成员变量会导致未定义行为。