在c++中如何用new生成一个构造函数带参数的类数组?

高手解答,最好举例!

1.代码如下:#include <iostream>
#include <new>
using namespace std;

class foo
{
public:
explicit foo( int id=0 ) : id_(id)
{
cout << __FUNCTION__ << " " << id_ << endl;
}
~foo()
{
cout << __FUNCTION__ << " " << id_ << endl;
}
private:
int id_;
};

int main()
{
int a[2] = { 0, 1 };

// 第一种方法
{
foo b[2] = { foo(a[0]), foo(a[1]) };
}

cout << "-----------------" << endl;

// 第二种方法
{
char _b_buf_[ sizeof(foo)*2 ];
foo (&b)[2] = (foo(&)[2])_b_buf_;
for( size_t i=0; i<2; ++i )
{
new(&b[i]) foo( a[i] );
}

// ...use b

for( size_t i=0; i<2; ++i )
{
b[2-1-i].~foo();
}
}

cout << "-----------------" << endl;

// 这估计就是你要的了,和第二种方法一样
{
foo* p = (foo*)operator new( sizeof(foo)*2 );
for( size_t i=0; i<2; ++i )
{
new(&p[i]) foo( (int)i );
}

// ...use b

for( size_t i=0; i<2; ++i )
{
p[2-1-i].~foo();
}
operator delete( p );
}

return 0;
}
2.C++ new用法之一 new运算符
最常用的是作为运算符的new,比如:
string *str = new string(“test new”);
作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。
new会在堆上分配一块内存,并会自动调用类的构造函数。
C++ new用法之二 new函数
第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:
void *operator new(size_t size);
new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加额外的参数,但是必须保证第一个参数必须是size_t类型,它指明了分配内存块的大小,C++允许你这么做,当然一般情况下这是不必要的。如果重载了new函数,在使用new操作符时调用的就是你重载后的new函数了。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-10
C++不支持直接构造 构造函数带参数的数组,也就是说如果你想要创建一个数组,必须要保证创建类型有默认的构造函数。本回答被提问者采纳
第2个回答  2019-05-04
1.代码如下:#include
<iostream>
#include
<new>
using
namespace
std;
class
foo
{
public:
explicit
foo(
int
id=0
)
:
id_(id)
{
cout
<<
__FUNCTION__
<<
"
"
<<
id_
<<
endl;
}
~foo()
{
cout
<<
__FUNCTION__
<<
"
"
<<
id_
<<
endl;
}
private:
int
id_;
};
int
main()
{
int
a[2]
=
{
0,
1
};
//
第一种方法
{
foo
b[2]
=
{
foo(a[0]),
foo(a[1])
};
}
cout
<<
"-----------------"
<<
endl;
//
第二种方法
{
char
_b_buf_[
sizeof(foo)*2
];
foo
(&b)[2]
=
(foo(&)[2])_b_buf_;
for(
size_t
i=0;
i<2;
++i
)
{
new(&b[i])
foo(
a[i]
);
}
//
...use
b
for(
size_t
i=0;
i<2;
++i
)
{
b[2-1-i].~foo();
}
}
cout
<<
"-----------------"
<<
endl;
//
这估计就是你要的了,和第二种方法一样
{
foo*
p
=
(foo*)operator
new(
sizeof(foo)*2
);
for(
size_t
i=0;
i<2;
++i
)
{
new(&p[i])
foo(
(int)i
);
}
//
...use
b
for(
size_t
i=0;
i<2;
++i
)
{
p[2-1-i].~foo();
}
operator
delete(
p
);
}
return
0;
}
2.C++
new用法之一
new运算符
最常用的是作为运算符的new,比如:
string
*str
=
new
string(“test
new”);
作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。
new会在堆上分配一块内存,并会自动调用类的构造函数。
C++
new用法之二
new函数
第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:
void
*operator
new(size_t
size);
new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加额外的参数,但是必须保证第一个参数必须是size_t类型,它指明了分配内存块的大小,C++允许你这么做,当然一般情况下这是不必要的。如果重载了new函数,在使用new操作符时调用的就是你重载后的new函数了。
第3个回答  2010-05-25
#include <iostream>
using namespace std;

class A
{
public:
A(int a){i = a;}
void print(){cout << "i = " << i << endl;}
private:
int i;
};
int main()
{
A *a[10];
for (int i = 0;i < 10;i++)
a[i] = new A(i);
return 0;
}

在c++中如何用new生成一个构造函数带参数的类数组?
作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。new会在堆上分配一块内存,并会自动调用类的构造函数。C++ new用法之二 new函数 第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:void *operator new(size_t size);new函数返回的是一个...

请问c++怎么用new创建有参数的构造函数的类?
CA *cap = new CA(1); 指针 CA ca(1); 对象

c++里使用动态分配内存,如何调用带参数的构造函数
你可以输入以后再拷贝到数组里去(operator=),因为定义对象数组时就必须初始化每个对象,所以 student = new Student[n];这一句实际上已经调用了每个对象的无参数构造函数,如果你没有提供一个无参数的构造函数那么这个句子会报错 另一种方法是 Student** student;student = new Student*[n];\/\/ 输入...

C++中的new函数怎么用?
你这个函数的作用是动态建立一个(n1+1)*(n2+1)的二维数组(注:在c++中 直接用new(a[][])这种形式是错误的)首先明白所谓指针就是存放地址的变量,这一点最重要 double **a=new double*[n1+1];这句话的意思是开辟以一块连续的空间用来存储指针变量(指针的指针),它的大小是n1+1。*a...

C++用NEW或malloc分配的类,如何给构造函数传参?
class Base { public:Base(){} Base(int Num):m_iNum(Num){} private:int m_iNum;} Base* pBase = new Base(0);pBase = new Base;分别调用两种构造函数

C++ new 声明数组
数组就应该是数组的样子,哪有声明数组的时候还能初始化变量的。A * p=new A[10]; 这只是说创建了一个10元素的数组,并没有变成对象分配内存。 要初始化还要用for循环一个一个初始化。这样。for(int i=0;i<n;i++){p[i]=new A(m);} .因为这里的p[i]只相当于一个没有被初始化的...

C++怎么用new创建类对象?
假设类名字为 T 使用语法 :T* object = new T(), 其中括号里可以填写类初始化的参数, 得到的 object 是一个T类型的指针,别忘了用delet object 释放内存。当C++程序用new 分配内存的时候,会比C的malloc 做一些额外的工作,尤其是使得类里面使用的STD标准库类型的变量的到合适的初始化。此外,...

C++中用new运算符创建一个类的数组指针会调用类的构造函数吗
当然会执行,不论是什么情况,只要你实例化了一个类也就是当你创建了一个对象时,就会自动调用构造函数。

关于C++ 中 new 的使用与重载
然而,C++的new操作具有丰富的拓展性,以提供更大的灵活性。它的基本使用包括创建单个对象和数组对象。对于基本类型,new操作可以生成默认值或用户指定的值;对于类对象,可以调用构造函数。C++中,new操作返回的是具体类型指针,可以利用auto自动识别。数组操作略有复杂,普通对象数组和函数指针数组都有其特定...

C++中new的用法
C++中new运算符用于动态分配和撤销内存的运算符。1、开辟单变量地址空间 new int; \/\/开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 2)int *a = new int(5) 作用同上,但是同时将整数赋值为5。2、开辟数组空间 要访问...

相似回答