LINUX.ORG.RU

История изменений

Исправление zerhud, (текущая версия) :

адрес будет, только такой код не стоит использовать. конструктор и деструктор - это особые методы. конструктор вызывается для еще не созданного объекта. this дает какой-то адрес, и годится этот дарес только для того, чтоб использовать его как константу например, обращатся к такому объекту нельзя.

в добавок этот дарес не очень то точный :)
(то есть если занесешь его в какой-то реестр, потом можешь пожать странные результаты)

#include <iostream>

class base_1 {
public:
    base_1() { std::cout << this << std::endl; }
    virtual ~base_1() noexcept =default ; 
    virtual void foo() noexcept {}
};
class base_2 {
public:
    base_2() { std::cout << this << std::endl; }
    virtual ~base_2() noexcept =default ;
};
class child : public base_1, public base_2 {
public:
    child() { std::cout << this << std::endl; }
};

int main(int,char**)
{
    child a;
    return 0;
}

ps: почему спойлер не показывается, что не так делаю?

Исходная версия zerhud, :

адрес будет, только такой код не стоит использовать. конструктор и деструктор - это особые методы. конструктор вызывается для еще не созданного объекта. this дает какой-то адрес, и годится этот дарес только для того, чтоб использовать его как константу например, обращатся к такому объекту нельзя.

в добавок этот дарес не очень то точный :)

#include <iostream>

class base_1 {
public:
    base_1() { std::cout << this << std::endl; }
    virtual ~base_1() noexcept =default ; 
    virtual void foo() noexcept {}
};
class base_2 {
public:
    base_2() { std::cout << this << std::endl; }
    virtual ~base_2() noexcept =default ;
};
class child : public base_1, public base_2 {
public:
    child() { std::cout << this << std::endl; }
};

int main(int,char**)
{
    child a;
    return 0;
}