#include <iostream>
class SubjectClass
{
public:
std::size_t id() const
{
std::clog << "Id: " << this << std::endl;
return reinterpret_cast<std::size_t>(this);
}
};
class Foo
{
SubjectClass * m_subject;
public:
explicit Foo(SubjectClass * subject)
: m_subject(subject)
{}
std::size_t id() const
{
std::clog << "SubjectsId: " << this->m_subject << std::endl;
return reinterpret_cast<std::size_t>(this->m_subject);
}
void doShitOnWholeProgramm()
{
Foo f2(this->m_subject);
std::cout << "InnerSame: " << (f2.id() == this->id()) << std::endl;
}
};
// Gleiche Ebene hier
int main()
{
SubjectClass subject;
Foo f(&subject);
// ...
f.doShitOnWholeProgramm();
// ...
std::cout << "Same: " << (f.id() == subject.id()) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgU3ViamVjdENsYXNzCnsKcHVibGljOgoJc3RkOjpzaXplX3QgaWQoKSBjb25zdAoJewoJCXN0ZDo6Y2xvZyA8PCAiSWQ6ICIgPDwgdGhpcyA8PCBzdGQ6OmVuZGw7CgkJcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpzaXplX3Q+KHRoaXMpOwoJfQp9OwoKY2xhc3MgRm9vCnsKCVN1YmplY3RDbGFzcyAqIG1fc3ViamVjdDsKCQpwdWJsaWM6CglleHBsaWNpdCBGb28oU3ViamVjdENsYXNzICogc3ViamVjdCkKCSA6IG1fc3ViamVjdChzdWJqZWN0KQoJe30KCQoJc3RkOjpzaXplX3QgaWQoKSBjb25zdAoJewoJCXN0ZDo6Y2xvZyA8PCAiU3ViamVjdHNJZDogIiA8PCB0aGlzLT5tX3N1YmplY3QgPDwgc3RkOjplbmRsOwoJCXJldHVybiByZWludGVycHJldF9jYXN0PHN0ZDo6c2l6ZV90Pih0aGlzLT5tX3N1YmplY3QpOwoJfQoJCgl2b2lkIGRvU2hpdE9uV2hvbGVQcm9ncmFtbSgpCgl7CgkJRm9vIGYyKHRoaXMtPm1fc3ViamVjdCk7CgkJCgkJc3RkOjpjb3V0IDw8ICJJbm5lclNhbWU6ICIgPDwgKGYyLmlkKCkgPT0gdGhpcy0+aWQoKSkgPDwgc3RkOjplbmRsOwoJfQp9OwoKLy8gR2xlaWNoZSBFYmVuZSBoaWVyCmludCBtYWluKCkKewoJU3ViamVjdENsYXNzIHN1YmplY3Q7CglGb28gZigmc3ViamVjdCk7CgkKCS8vIC4uLgoJZi5kb1NoaXRPbldob2xlUHJvZ3JhbW0oKTsKCS8vIC4uLgoJCglzdGQ6OmNvdXQgPDwgIlNhbWU6ICIgPDwgKGYuaWQoKSA9PSBzdWJqZWN0LmlkKCkpIDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJuIDA7Cn0K