C++ cppreference示例中具有多个参数的新

C++ cppreference示例中具有多个参数的新,c++,new-operator,C++,New Operator,从第页开始 什么是new(2,f)T做什么 什么是new(2,f)T做什么 placement new中的第二个参数可用于将参数传递给自定义T::operator new实现 下面是一个触发它的玩具示例(在输出中,您可以看到参数f=42.0被传递到T::operator new): #包括 结构T{ T(){ 标准::cout new(2,f)T;做什么 placement new中的第二个参数可用于将参数传递给自定义T::operator new实现 下面是一个触发它的玩具示例(在输出中,您可

从第页开始

什么是
new(2,f)T做什么

什么是
new(2,f)T做什么

placement new中的第二个参数可用于将参数传递给自定义
T::operator new
实现

下面是一个触发它的玩具示例(在输出中,您可以看到参数
f=42.0
被传递到
T::operator new
):

#包括
结构T{
T(){
标准::cout
new(2,f)T;
做什么

placement new中的第二个参数可用于将参数传递给自定义
T::operator new
实现

下面是一个触发它的玩具示例(在输出中,您可以看到参数
f=42.0
被传递到
T::operator new
):

#包括
结构T{
T(){

std::cout使用网上示例中的此类技巧时要小心,它们通常很糟糕

<> > C++中的< <代码>新< /COD>关键字是C.

中的以下简称
typedef struct {
    int a;
} Foo;

Foo *makeFoo(int a) {
    Foo *foo = (Foo *)malloc(sizeof(Foo));
    foo->a = a;
}

malloc
函数为该对象保留内存,表示该对象将用作指针。
new
操作符也会这样做,但默认值为
sizeof(Foo)
。您看到的参数是
sizeof
align\u val\t
实例的结果。

使用在线示例中的此类技巧时要小心,它们通常很糟糕

<> > C++中的< <代码>新< /COD>关键字是C.

中的以下简称
typedef struct {
    int a;
} Foo;

Foo *makeFoo(int a) {
    Foo *foo = (Foo *)malloc(sizeof(Foo));
    foo->a = a;
}

malloc
函数为该对象保留内存,表示该对象将用作指针。
new
操作符也会这样做,但默认值为
sizeof(Foo)
。您看到的参数是
sizeof
align\u val\t
实例的结果。

有用的补充阅读:您可以使用自定义参数定义自定义
new
操作符:
struct t{void*操作符new(size\t s,int x,double f);}
有用的补充阅读:您可以使用自定义参数定义自定义
new
运算符:
struct T{void*operator new(size\T s,int x,double f);};
这不是唯一的事情。new还正式地将对象引入生活。基于malloc的示例没有(您需要它是
Foo*Foo=new(malloc(sizeof(Foo))Foo;
-但这并不能解释可能的未对准)@我使用的例子是C。<代码> new < /Cord>关键字是C++唯一的。不是这个点吗?对象生命周期是问题的核心,C甚至没有对象生命周期与存储持续时间分开的概念,这使得它不适合回答这个问题。这不是唯一的事情。New也正式带来了Obj.ect to life。基于malloc的示例没有(您需要它是
Foo*Foo=new(malloc(sizeof(Foo))Foo;
——但这并不能解释可能的不对齐)@我使用的例子是C。<代码>新< /COD>关键字是C++唯一的。不是点吗?对象生命周期是问题的核心,C甚至没有对象生命周期与存储持续时间分开的概念,这使得它不适合回答这个问题。
typedef struct {
    int a;
} Foo;

Foo *makeFoo(int a) {
    Foo *foo = (Foo *)malloc(sizeof(Foo));
    foo->a = a;
}