Giriş
std::addressof() C++11 ile yeni gelen bir metod. Kullanmak için <memory> dosyası include edilmeli.
Açıklaması şöyle. smart pointer'larda nesnenin adresini almak için kullanılır.Bu metoda hiç ihtiyacım olmadı. Ancak anladığım kadarıyla eğer & operatörü override edilmişse
bu metodu kullanarak nesnenin adresini alabiliriz.
Gerçekleştirim
GCC ve boost tarafından gerçekleştirimi şöyle.
Kullanımına dair bir örnek
std::addressof() C++11 ile yeni gelen bir metod. Kullanmak için <memory> dosyası include edilmeli.
Açıklaması şöyle. smart pointer'larda nesnenin adresini almak için kullanılır.Bu metoda hiç ihtiyacım olmadı. Ancak anladığım kadarıyla eğer & operatörü override edilmişse
bu metodu kullanarak nesnenin adresini alabiliriz.
& is often overloaded when building smart pointer classes, as it makes them easier to use: more often than not you want the bare managed pointer, not the address of the smart pointer object.
Neglecting the evolutionary backwater that was std::auto_ptr, smart pointer classes such as std::unique_ptr and std::shared_ptr have been introduced into the standard since C++11. std::addressof was introduced in that standard since taking the real address of an object is occasionally required.
Gerçekleştirim
GCC ve boost tarafından gerçekleştirimi şöyle.
reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char &>(object)))
Muhtemel gerçekleştirimi şöyletemplate< class T >
T* addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)));
}
ÖrnekKullanımına dair bir örnek
#include <memory>
#include <iostream>
struct A {
A* operator &() {return nullptr;}
};
int main () {
A a;
std::cout << &a << '\n'; // Prints 0
std::cout << std::addressof(a); // Prints a's actual address
}
Hiç yorum yok:
Yorum Gönder