公共运算符 new、私有运算符删除:使用 new 时出现 C2248“无法访问私有成员”

2024-04-14

类具有重载运算符new and delete. new是公开的,delete是私人的。

在构造此类的实例时,出现以下错误:

pFoo = new Foo(bar)

example.cpp(1): 错误 C2248: 'Foo:operator delete': 无法访问类 'Foo' 中声明的私有成员

但没有人打电话给delete那么,编译器扭曲的头脑中到底发生了什么? :)

  1. 错误的原因是什么?
  2. 是否可以在不求助会员的情况下解决问题CreateInstance功能?

当你这样做时new Foo()然后发生两件事:首先operator new调用分配内存,然后构造函数Foo叫做。如果该构造函数抛出异常,由于您无法访问已分配的内存,C++ 运行时将通过将其传递给适当的内存来处理它。operator delete。这就是为什么你总是必须实现匹配operator delete对于每一个operator new你写的,这就是为什么它需要易于访问。

作为一种出路,你可以将它们都设为私有并调用operator new来自公共成员函数(例如create()).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

公共运算符 new、私有运算符删除:使用 new 时出现 C2248“无法访问私有成员” 的相关文章

随机推荐