Что такое указатель this в C++?

«Что такое указатель this в C++?» — вопрос из категории C++ Core, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

this — это ключевое слово в C++, представляющее собой указатель на константу (ClassName* const this) на текущий объект, внутри нестатических методов класса. Его тип — ClassName*. В константных методах его тип — const ClassName*.

Основные цели использования:

  1. Разрешение неоднозначности имен: Когда имя параметра метода совпадает с именем поля класса.

    class Widget {
        int id;
    public:
        void setId(int id) {
            this->id = id; // this->id относится к полю класса, id — к параметру.
        }
    };
  2. Возвращение ссылки на текущий объект из метода (для цепочечных вызовов):

    class Logger {
        Logger& log(const std::string& msg) {
            std::cout << msg;
            return *this; // Разыменовываем указатель, возвращаем ссылку.
        }
    };
    // Использование:
    Logger logger;
    logger.log("Hello ").log("Worldn"); // Цепочка вызовов
  3. Передача текущего объекта в другие функции:

    void externalProcessor(MyClass* obj);
    class MyClass {
        void process() {
            externalProcessor(this); // Передаем указатель на себя.
        }
    };
  4. В лямбда-выражениях внутри класса: Для захвата текущего объекта.

    class Task {
        int data;
        void schedule() {
            // Захватываем указатель 'this' для доступа к полям.
            auto job = [this]() { std::cout << data; };
        }
    };

Важные ограничения:

  • this нельзя изменить (это константный указатель).
  • this недоступен в статических методах класса, так как они не привязаны к конкретному экземпляру.
  • В конструкторах и деструкторах this также корректен и указывает на создаваемый/уничтожаемый объект.

Видео-ответы