Max*_*xVT 19 c++ overloading compiler-errors
一个类重载了运算符new和delete.new是公开的,delete是私人的.
构造此类的实例时,我收到以下错误:
pFoo = new Foo(bar)
Run Code Online (Sandbox Code Playgroud)
example.cpp(1):错误C2248:'Foo:operator delete':无法访问类'Foo'中声明的私有成员
但是这里没有调用delete,所以在编译器的扭曲思想中发生了什么?:)
CreateInstance函数的情况下解决问题?sbi*_*sbi 27
当你这样做时new Foo()会发生两件事:首先operator new调用first 来分配内存,然后调用一个构造函数Foo.如果该构造函数抛出,因为您无法访问已分配的内存,C++运行时将通过将其传递给相应的内容来处理它operator delete.这就是为什么你总是必须operator delete为operator new你写的每一个都实现一个匹配,这就是为什么它需要被访问.
作为一种出路,您可以将它们都设置为私有并operator new从公共成员函数(例如create())调用.