类具有重载运算符new
and delete
. new
是公开的,delete
是私人的。
在构造此类的实例时,出现以下错误:
pFoo = new Foo(bar)
example.cpp(1): 错误 C2248: 'Foo:operator delete': 无法访问类 'Foo' 中声明的私有成员
但没有人打电话给delete
那么,编译器扭曲的头脑中到底发生了什么? :)
- 错误的原因是什么?
- 是否可以在不求助会员的情况下解决问题
CreateInstance
功能?
当你这样做时new Foo()
然后发生两件事:首先operator new
调用分配内存,然后构造函数Foo
叫做。如果该构造函数抛出异常,由于您无法访问已分配的内存,C++ 运行时将通过将其传递给适当的内存来处理它。operator delete
。这就是为什么你总是必须实现匹配operator delete
对于每一个operator new
你写的,这就是为什么它需要易于访问。
作为一种出路,你可以将它们都设为私有并调用operator new
来自公共成员函数(例如create()
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)