内存分配运算符和表达式 在C++中,“新”是一个运算符,还是一个表达式或某种关键字?我想到的一个类似问题是,我应该称“=”为运算符还是表达式?
新的is运算符。您可以重载它并编写自己的版本。我还认为这是个算符。表达式是由操作符、变量、函数调用等组成的更复杂的事物,请尝试获得C++语言标准。它必须描述你提到的所有事情 C++将内存分配和对象生存期的概念分开。与C相比,这是一个新特性,因为在C中,对象相当于它的内存表示(在C++中称为“POD”) 当构造函数完成时,对象开始其生命周期,当析构函数完成时,对象生命周期结束。因此,对于具有动态存储持续时间的对象,生命周期由四个关键里程碑组成:内存分配运算符和表达式 在C++中,“新”是一个运算符,还是一个表达式或某种关键字?我想到的一个类似问题是,我应该称“=”为运算符还是表达式?,c++,C++,新的is运算符。您可以重载它并编写自己的版本。我还认为这是个算符。表达式是由操作符、变量、函数调用等组成的更复杂的事物,请尝试获得C++语言标准。它必须描述你提到的所有事情 C++将内存分配和对象生存期的概念分开。与C相比,这是一个新特性,因为在C中,对象相当于它的内存表示(在C++中称为“POD”) 当构造函数完成时,对象开始其生命周期,当析构函数完成时,对象生命周期结束。因此,对于具有动态存储持续时间的对象,生命周期由四个关键里程碑组成: 内存分配 对象构造 对象销毁 内存释放 < > C+
void * addr = ::operator new(sizeof(T));
T * p = new (addr) T; // placement-new
同样,delete表达式delete p代码>首先调用析构函数,然后释放内存。这相当于:
p->~T();
::operator delete(addr);
因此,默认的new和delete表达式在一次清洗中执行内存分配和对象构造。新表达式的所有其他形式,统称为“placement new”,在构造对象之前调用相应的placement new操作符来分配内存。但是,没有匹配的“placement delete expression”,所有使用placement new创建的动态对象都必须使用p->~T()手动销毁代码>
总之,区分新表达式和新运算符非常重要。这是C++中内存管理的核心。 < P>这是所有的。
2.13表4明确列出了new
作为关键字
5.3.4引入了新表达式
。这是一个表达式,例如newint(5)
,它使用new
关键字、类型和初始值
5.3.4/8然后声明调用运算符new
,为新表达式创建的对象分配内存
=
的工作原理完全相同。每个类都有一个运算符=
(除非明确删除),该运算符用于赋值表达式中。我们通常称a=5代码>只是一个赋值,即使从技术上讲它是“一个包含赋值表达式的表达式语句”。投票结束:这不是一个真正的编程问题。@Oli,怎么会这样?这是一个关于编程语言语义的特定的、可回答的问题。这个问题的一个小问题是,它假设关键字不能是表达式这是一个明确的反例。也许你可以引用标准中的一些内容来支持你的答案。我也听到了术语赋值表达式,你能提供一些例子吗?谢谢。事实上这不正确<代码>新建
是最常见的新表达式。
p->~T();
::operator delete(addr);