История изменений
Исправление 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;
}