一个类具有重载的运算符newdeletenew是公共(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/

    10-09 18:20
    查看更多