首页 / 知识
关于C#:如何防止在堆上创建对象?
2023-04-12 04:56:00

How to prevent an object being created on the heap?有人知道如何在与平台无关的C代码中阻止在堆上创建对象吗?也就是说,对于类" Foo",我要阻止用户执行此操作:
,仅允许他们这样做:
有人有什么想法吗? 干杯, 尼克的答案是一个很好的起点,但不完整,因为您实际上需要重载:
(良好的编码习惯会建议您也应该使delete和delete []运算符重载-我会这样做,但是由于它们不会被调用,所以它实际上不是必需的。) Pauldoo也是正确的,尽管它确实可以从Foo继承而幸存下来,但它不能在Foo上聚合。您可以做一些模板元编程魔术来帮助防止这种情况发生,但是它不能避免受到"邪恶用户"的侵害,因此可能不值得这样做。大约100%的方法是唯一有关如何使用它的文档,并进行代码审查以确保正确使用它。 您可以为Foo重载new并将其设为私有。这意味着编译器会抱怨...除非您从Foo内部在堆上创建Foo实例。为了解决这种情况,您不能简单地编写Foo的新方法,然后链接器会抱怨未定义的符号。
PS。是的,我知道这很容易解决。我真的不建议这样做-我认为这是一个坏主意-我只是在回答问题! ;-) 我不知道如何可靠且便携地进行操作。... 如果对象在堆栈上,则可以在构造函数中断言'this'的值始终接近堆栈指针。在这种情况下,对象很有可能会在堆栈上。 我相信并非所有平台都在同一方向上实现其堆栈,因此,当应用程序开始验证堆栈增长的方式时,您可能需要进行一次一次性测试。
@尼克 可以通过创建派生自Foo或汇总Foo的类来避免这种情况。我认为我所建议的(虽然不够健壮)仍然适用于派生类和聚合类。 例如:
在这里我绕过Foo隐藏的新运算符在堆上创建了'Foo'的实例。 因为调试头可以覆盖操作员的新签名,所以最好将...签名用作完整的补救措施:
这可以通过将构造函数设为私有并提供静态成员以在堆栈中创建对象来防止
这将使对象的创建始终在堆栈中。 您可以将其声明为接口,并直接从您自己的代码中更直接地控制实现类。 您可以在Foo类中声明一个名为" operator new"的函数,该函数将阻止对常规形式的new的访问。 这是您想要的行为吗? 不确定这是否提供任何编译时机会,但是您是否考虑过为类重载'new'运算符? |
最新内容
相关内容
python怎么执行命令
python怎么执行命令,代码,环境,培训,系统,工作,命令,路径,操作系统,程序,空格,Python的命令提示符是在操作系统中,提示进行命令输入的一种工作pythonWeb开发和图形用户界面的模
pythonWeb开发和图形用户界面的模块有哪些?,网站,工具,互动,平台,培训,设计,模块,用户界面,图形,框架,关于PythonWeb开发和图形用户界面的模块python怎么在python3执行pip
python怎么在python3执行pip,培训,预计,情况,脚本,版本,以下,版本号,主角,命令,声明,python3是目前比较流行的Python版本,而且Python官方团队python编程平台免费吗
python编程平台免费吗,代码,培训,平台,设计,初级,语言,解释性,提示符,标点符号,可读性,python是免费的,也就是开源的。注:python是一个高层次的python循环执行语句怎么写
python循环执行语句怎么写,培训,项目,语句,条件,序列,双数,括号,后跟,字符串,语法,python编程中while语句用于循环执行程序,即在某条件下,循环python列表操作的函数和方法
python列表操作的函数和方法,培训,位置,列表,元素,操作,函数,末尾,方法,对象,以下,1列表操作包含以下函数:21、cmp(list1,list2):比较两个列表python程序执行完不自动退出
python程序执行完不自动退出,培训,程序,语句,里加,脚本,命令,关键,文件,控制台,函数,默认情况下,python执行完成后会直接退出。如果还想查看运python如何执行python程序
python如何执行python程序,系统,代码,名称,培训,平台,语句,模式,结果,提示符,命令,安装完Python在Windows或Linux中的终端中直接输入python即python如何操作mysql数据库
python如何操作mysql数据库,培训,标准,项目,密码,数据库,接口,表字,操作,用户,机子,Python标准数据库接口为PythonDB-API,PythonDB-API为开发python如何执行python文件
python如何执行python文件,代码,培训,文件,程序,命令,模式,事半功倍,后缀,文本,以上,用文本编辑器写Python程序,然后保存为后缀为.py的文件,就python怎么执行.py文件
python怎么执行.py文件,培训,位置,代码,文件,空格,路径,文件名,时候,右侧,单击,要运行一个已经编写好的.py文件,可以单击开始菜单,在“搜索程序pythonpython跨平台吗?
pythonpython跨平台吗?,平台,培训,代码,手机,项目,设计,语言,版本,终端,构架,python是跨平台的,免费开源的一门计算机编程语言。是一种面向对