为类重载运算符 new
当我们重载类的 new 运算符时,我们将该函数声明为成员函数。 例如:
class OpNew {
public:
OpNew() { cout << "OpNew::OpNew()" << endl;}
void* operator new(size_t sz) {
cout << "OpNew::new: "
<< sz << " bytes" << endl;
return ::new char[sz];
}
};
语句 OpNew *obj = new OpNew
在幕后是如何工作的?因为重载的 new 是 OpNew 类的成员,而不是静态成员。那么编译器如何确保对 new 成员函数的调用成功呢?
When we overload new operator of a class, we declare the function as a member function.
For eg:
class OpNew {
public:
OpNew() { cout << "OpNew::OpNew()" << endl;}
void* operator new(size_t sz) {
cout << "OpNew::new: "
<< sz << " bytes" << endl;
return ::new char[sz];
}
};
How does the statement OpNew *obj = new OpNew
work under the hood ? as overloaded new is a member of OpNew class not a static. So how does compiler ensure this call to new
member function succeeds?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
类的
operator new()
或operator new[]()
始终是静态类成员,即使未使用关键字 static 进行声明也是如此。< /a>C++ 标准的规定(草案 n3242),在
[class.free]
部分:An
operator new()
oroperator new[]()
for a class is always a static class member, even if it is not declared with the keyword static.What the C++ standard says (draft n3242), in section
[class.free]
: