出于某种教育原因,我设法通过将引用运算符重载&
为已删除的成员函数或private
方法来阻止其他人获取我的类对象的地址。但是 C++11 提供了一个新的模板函数std::addressof
,它返回一个对象的地址。所以我也想禁用它,但是我陷入了半解决方案。这是我的代码尝试:
#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
我的对象不被调用。
感谢你们。