gpt4 book ai didi

c++ - 防止通过指针调用成员函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:47 25 4
gpt4 key购买 nike

考虑代码:

#include <iostream>

class Foo
{
public:
Foo& operator*() = delete;
Foo* operator->() = delete;
void f()
{
std::cout << "Foo::f()" << std::endl;
}
};

int main()
{
Foo foo;
// foo -> f(); // invokes deleted operator ->, so it doesn't compile

Foo* pFoo = new Foo;
pFoo -> f(); // how can we make this not compilable?
delete pFoo;
}

有什么方法可以防止倒数第二行 pFoo -> f(); 编译?换句话说,我希望能够创建一个指向该对象的指针,但不能在调用成员函数时使用它。删除 operator*()operator->() 不起作用,因为它们仅由 Foo 调用,而不是由指向的指针调用Foo.

PS:我希望能够在堆上创建对象,因此将 operator new 标记为私有(private)不是一个选项。

最佳答案

你不能,因为你不能改变内置类型的语义。

operator ->operator* 将始终适用于内置的 Foo*。然后,由于它是 (*pFoo).f() 的简写形式,您有一个有效的 Foo 对象,其上的公共(public) f()可以调用。

关于c++ - 防止通过指针调用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27927798/

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