new()和delete()作为C++中的运算符?

Laa*_*vaa 3 c++ new-operator delete-operator

在c ++中将new()和delete()实现为运算符的用途或原因是什么?使它成为操作员而不是功能有什么好处?

Kaz*_*Kaz 7

new操作者不能是一个函数,因为它接受一个类型作为参数.您不能将其写new foo_type为函数调用,因为foo_type它不是生成值的表达式,而是类型名称.

delete操作可能是超载了不同指针类型的函数,和一个额外的可选bool的参数delete []语义.为什么有一个delete运算符可能与其new对应物对称.

也就是说,模板函数可以将类型作为模板参数.但是newdelete运营商一直在模板之前.

此外,可以编写一个函数,该函数采用一种类型的原型实例,而不是一种类型,从中构造一个对象: newobj(m_class(constructor_arg)).newobj对于不同类型,这会重载.它分配空间,将构造复制到其中,并返回对象.

所以最后,设计反映了设计师的品味和想法.

在语言设计中,操作符和函数(以及语句,声明等)之间的分离本身并不是绝对必要的.

  • 它可能不会是@ sepp2k,因为除了new类型还可以采用初始化器.直到无法实现的可变参数模板,甚至具有完美转发的可变参数模板都不是完美的替代品. (3认同)
  • 你不能把`new foo_type`写成函数调用,因为它不是函数调用的有效语法(即使参数是值而不是类型).但是你可以像`new <foo_type>()`轻松进行函数调用.唯一的问题是在模板出现之前引入了`new`运算符.如果首先引入模板,我可以很容易地将`new`定义为模板函数. (2认同)
  • 更具体地说,使用类型参数意味着您可以在整个应用程序中有选择地覆盖"new"的功能.你不能用`malloc`做同样的事; 相反,你必须编写一个新的allocator函数,然后修改你的代码块来使用它. (2认同)