gpt4 book ai didi

c++ - 是否可以在我的对象上停止 std::addressof?

转载 作者:搜寻专家 更新时间:2023-10-30 23:51:40 27 4
gpt4 key购买 nike

出于某些教育原因,我通过将引用运算符 & 重载为已删除的成员函数或作为 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 这是我类(class)的友元模板函数,那么它就可以正常工作。但是,如果有人在我的类对象上调用 std::addressof,编译器不会阻止他。

我需要一些方法来阻止 std::addressof 不被我的对象调用。

谢谢你们。

最佳答案

没有。

std::addressof整点是为了让人们find the address of the object when the author has tried to make this difficult/obfuscated/awkward .

语言没有提供禁用或禁止它的方法。这是一个功能。

实际上,如果您不介意的话,您可以通过为您的类型专门化 std::addressof 来伪造它 your program having undefined behaviour as a result ! (说真的,不要这样做……)。

关于c++ - 是否可以在我的对象上停止 std::addressof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383752/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com