По некоторым образовательным причинам мне удалось не дать другим принять адрес объектов моего класса, перегружая ссылочный оператор &
как функцию удаленного члена или как метод private
.Но C ++ 11 представляет новую шаблонную функцию std::addressof
, которая возвращает адрес объекта.Так что я хочу также отключить его, однако я застрял в половину решения.Вот мой код try:
#include "stdafx.h"
#include <memory>
class Foo {
public:
Foo* operator&() = delete; // declared deleted so no one can take my address
friend Foo* addressof(Foo&) = delete; // ok here.
private:
// Foo* operator&() { return nullptr; } // Or I can declare it private which conforms to older versions of C++.
};
int main() {
Foo f{};
// std::cout << &f << std::endl;
// std::cout << addressof(f) << std::endl; // ok
std::cout << std::addressof(f) << std::endl;// Why I can't stop `std::addressof()`?
std::cout << std::endl;
}
Как вы можете видеть, если я вызываю addressof
, который является функцией шаблона для моего класса, то он работает нормально.Но если кто-то вызывает std::addressof
на моем объекте класса, компилятор не мешает ему.
Мне нужен какой-то способ остановить std::addressof
, чтобы не вызывать мои объекты.
Спасиборебята.