0

我想在一个禁止使用 operator&() 的类中声明一个原始类型成员。换句话说:我不希望任何人获取该成员的地址(并可能将其传递给其他类或函数等)

如果不使用包装器类型,这可能吗?

4

3 回答 3

1

将您的成员声明为私有,并且您的 getter 不会返回引用/指针。
它也适用于非原始类(具有复制成本)

class A
{
public:
   const A* operator & () const = delete; // pre-require of OP
   A* operator&() = delete;               // pre-require of OP.

   int getMember() const { return member; }
   void setMember(int value) { member = value;} 

   // Other stuff.

private:
    int member;
};
于 2013-09-14T09:42:07.823 回答
1

您可以将其声明operator&()为私有,以防止使用&前缀获取地址,但std::addressof始终可以用来规避这种情况。无法阻止获取地址,但可以将其作为一种威慑手段。

于 2013-09-13T19:04:46.460 回答
1

假设你的班级是 A

把它放在你的班级声明中

A* operator&() = delete;
于 2013-09-13T19:13:04.203 回答