一个类具有重载的运算符new
和delete
。 new
是公共(public)的,delete
是私有(private)的。
在构造此类的实例时,出现以下错误:
pFoo = new Foo(bar)
示例.cpp(1):错误C2248:'Foo:operator delete':无法访问在类'Foo'中声明的私有(private)成员
但是这里没有对
delete
的调用,那么在编译器中发生了什么事呢? :)CreateInstance
函数来解决问题? 最佳答案
当您执行new Foo()
时,会发生两件事:首先调用operator new
分配内存,然后调用Foo
的构造函数。如果该构造函数抛出异常,则由于您无法访问已分配的内存,因此C++运行时将把它传递给适当的operator delete
来处理它。这就是为什么您始终必须为您编写的每个operator delete
实现一个匹配的operator new
的原因,这就是为什么它需要可访问的原因。
作为一种解决方法,您可以将它们都设为私有(private),并从公共(public)成员函数(如operator new
)中调用create()
。
关于c++ - 新建公共(public)运营商,私有(private)运营商删除: getting C2248 “can not access private member” when using new,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1820069/