请问有人能为我解释一下《C++ Primer第五版》中的这一段话吗?
术语:new表达式与operator new函数
库函数operator new和operator delete的名称容易引起误解。与其他操作符函数(如operator=)不同,这些函数不会重载new或delete表达式。事实上,我们无法重新定义new和delete表达式的行为。
新表达式总是通过调用operator new函数获取内存,然后在该内存中构造对象来执行。删除表达式总是通过销毁对象,然后调用operator delete函数释放对象使用的内存来执行。
通过提供我们自己的operator new和operator delete函数定义,我们可以更改内存的分配方式。但是,我们无法改变new和delete运算符的基本含义。
我看不出operator new或operator delete与其他重载的运算符(如赋值运算符=)之间的区别。所以“名称容易引起误解”是什么意思呢?我们都知道我们不能覆盖像fObj + fObj这样的表达式,但我们重载的是运算符而不是表达式本身。
实际上,我认为这一段话本身就很具有误导性。毕竟,我们可以“滥用”任何可重载运算符,并从中获得operator new和operator delete,那么他在这段话中的意思是什么呢?谢谢!
术语:new表达式与operator new函数
库函数operator new和operator delete的名称容易引起误解。与其他操作符函数(如operator=)不同,这些函数不会重载new或delete表达式。事实上,我们无法重新定义new和delete表达式的行为。
新表达式总是通过调用operator new函数获取内存,然后在该内存中构造对象来执行。删除表达式总是通过销毁对象,然后调用operator delete函数释放对象使用的内存来执行。
通过提供我们自己的operator new和operator delete函数定义,我们可以更改内存的分配方式。但是,我们无法改变new和delete运算符的基本含义。
我看不出operator new或operator delete与其他重载的运算符(如赋值运算符=)之间的区别。所以“名称容易引起误解”是什么意思呢?我们都知道我们不能覆盖像fObj + fObj这样的表达式,但我们重载的是运算符而不是表达式本身。
实际上,我认为这一段话本身就很具有误导性。毕竟,我们可以“滥用”任何可重载运算符,并从中获得operator new和operator delete,那么他在这段话中的意思是什么呢?谢谢!
operator<<
和operator>>
执行I/O操作,而不是位移操作。当然,任何理智的人都不应该考虑这样做。 - Hong Ooi->
也是一个例外,,
无法被重载。 - Yakk - Adam Nevraumontoperator ->
-- 尽管这并不是非常严格的。从技术上讲,operator->
只需要返回实现了->
的东西 -- 这将是一个指针或类似指针的类型(如迭代器、智能指针等)。 - Human-Compiler.
。对于->
,它会以一种奇怪的递归方式应用。 - Yakk - Adam Nevraumont