为什么在C++中实现new()和delete()作为操作符?将其作为操作符而不是函数有哪些优点?
使用new()和delete()作为操作符可以使代码更加简洁易读。它们可以像其他运算符一样用于创建和销毁对象,而不需要调用函数。此外,使用操作符还可以方便地进行重载,以满足特定的需求。
为什么在C++中实现new()和delete()作为操作符?将其作为操作符而不是函数有哪些优点?
使用new()和delete()作为操作符可以使代码更加简洁易读。它们可以像其他运算符一样用于创建和销毁对象,而不需要调用函数。此外,使用操作符还可以方便地进行重载,以满足特定的需求。
new
操作符不能作为一个函数,因为它接受类型作为参数。你不能将 new foo_type
写成函数调用,因为 foo_type
不是一个产生值的表达式,而是一个类型名。
delete
操作符可以是针对不同指针类型重载的函数,并且还有一个额外的可选的 bool
参数来表示 delete []
语义。为什么会有 delete
操作符可能是为了对称于其 new
对应符。new
和 delete
操作符比模板更早。newobj(m_class(constructor_arg))
。这个 newobj
针对不同的类型进行了重载。它分配空间,复制并构造对象,并返回该对象。new foo_type
写成函数调用,因为那不是有效的函数调用语法(即使参数是值而不是类型也一样)。然而,你可以轻松地像这样调用函数: new<foo_type>()
。唯一的问题在于,在模板引入之前,new
操作符已经被引入了。如果模板先被引入了,我可以很容易地想象new
被定义为一个模板函数。 - sepp2knew
的功能。您无法使用malloc
执行相同的操作;相反,您需要编写一个新的分配器函数,然后修改代码块以使用它。 - Rooknew foo_type
在语法上不是C++函数调用,这是不言自明的。 - Kaznew
运算符”指的是用作运算符的关键字new
,而“operator new
”则用于引用分配函数。此外,operator new
不需要类型... - bames53