Redian新闻
>
C++ 中 myobject * a =new myobject[n] 的问题
avatar
C++ 中 myobject * a =new myobject[n] 的问题# Programming - 葵花宝典
k*l
1
假设myobject 只有一个带参数的constructor: myobject(int parm),
^^^^
myobject * a =new myobject[n]
编译的时候说找不到 myobject() to initialize a vector.
试图加入参数: myobject * a =new myobject[n](parm)
又说 No initializer allowed for new of an array
请问有什么好办法解决这个问题?
avatar
t*y
2
加一个啥也不干或者提供默认参数的constructor myobject()

【在 k*****l 的大作中提到】
: 假设myobject 只有一个带参数的constructor: myobject(int parm),
: ^^^^
: myobject * a =new myobject[n]
: 编译的时候说找不到 myobject() to initialize a vector.
: 试图加入参数: myobject * a =new myobject[n](parm)
: 又说 No initializer allowed for new of an array
: 请问有什么好办法解决这个问题?

avatar
k*l
3
en .我也这么想,同时还要填一个myobject::init(int parm)完成
带参数的constructor: myobject(int parm)一摸一样的工作。 够麻烦的。
关键问题是: 为什么c++不让 new myobject[n]带参数呢?? 实现上应该不难啊。这个
限制有什么特别的理由??

【在 t*******y 的大作中提到】
: 加一个啥也不干或者提供默认参数的constructor myobject()
avatar
N*m
4
估计是new只负责分配空间?
可以用vector ob(n,myobject(parm))来实现。

这个

【在 k*****l 的大作中提到】
: en .我也这么想,同时还要填一个myobject::init(int parm)完成
: 带参数的constructor: myobject(int parm)一摸一样的工作。 够麻烦的。
: 关键问题是: 为什么c++不让 new myobject[n]带参数呢?? 实现上应该不难啊。这个
: 限制有什么特别的理由??

avatar
z*e
5
等OX
avatar
h*8
6
new 也负责调用constructor的

【在 N***m 的大作中提到】
: 估计是new只负责分配空间?
: 可以用vector ob(n,myobject(parm))来实现。
:
: 这个

avatar
N*m
7
好像是的耶。搞不懂了。

【在 h****8 的大作中提到】
: new 也负责调用constructor的
avatar
h*8
8
我想问题在于,如果new可以接受N个参数作为constructor得参数,那么new本身的
signature怎么写?

【在 N***m 的大作中提到】
: 好像是的耶。搞不懂了。
avatar
p*o
9
这个需求用operator new[]再加上placement new就好了。

【在 h****8 的大作中提到】
: 我想问题在于,如果new可以接受N个参数作为constructor得参数,那么new本身的
: signature怎么写?

avatar
f*Q
10
看这这个问题突然想起了十多年前的我……
avatar
h*0
11
没有办法解决。C++这个就是悲剧。
用指针数组吧。

【在 k*****l 的大作中提到】
: 假设myobject 只有一个带参数的constructor: myobject(int parm),
: ^^^^
: myobject * a =new myobject[n]
: 编译的时候说找不到 myobject() to initialize a vector.
: 试图加入参数: myobject * a =new myobject[n](parm)
: 又说 No initializer allowed for new of an array
: 请问有什么好办法解决这个问题?

avatar
z*e
12
姐姐能不能给写一个?
我写个operator new[]怎么都没搞成。好像只能用一个argument in the parameter
list.

【在 p***o 的大作中提到】
: 这个需求用operator new[]再加上placement new就好了。
avatar
p*o
13
都改过来了还这么跳!
T *arr = static_cast(operator new[] (sizeof(T)*N));
for (int i = 0; i < N; ++i)
new (arr+i) T(whatever_depends_on_i);

【在 z****e 的大作中提到】
: 姐姐能不能给写一个?
: 我写个operator new[]怎么都没搞成。好像只能用一个argument in the parameter
: list.

avatar
z*e
14
姐,你这句:
“都改过来了还这么跳!”
我读了半天,硬是没有弄明白什么意思!以前从来没见过这句话啊。
你给语法分析分析吧。
什么“都改过来了”?
谁在 “跳”?

【在 p***o 的大作中提到】
: 都改过来了还这么跳!
: T *arr = static_cast(operator new[] (sizeof(T)*N));
: for (int i = 0; i < N; ++i)
: new (arr+i) T(whatever_depends_on_i);

avatar
z*e
15
怎么delete?
class A{
public:
A(int i):i(i){
cout<}
int get() const{
cout<}
~A(){
cout<}
private:
int i;
};
template
T* new_with_ctor(int N){
T *arr = static_cast(operator new[] (sizeof(T)*N));
for (int i = 0; i < N; ++i)
new (arr+i) T(i);
return arr;
}
int main(int argc, char* argv[]){
int N=3;
A* p=new_with_ctor(N);
for(int i=0;ip[i].get();
}
//destruction
for(int i=0;i

【在 p***o 的大作中提到】

: 都改过来了还这么跳!
: T *arr = static_cast(operator new[] (sizeof(T)*N));
: for (int i = 0; i < N; ++i)
: new (arr+i) T(whatever_depends_on_i);

avatar
X*r
16
operator delete[] (p);

【在 z****e 的大作中提到】
: 怎么delete?
: class A{
: public:
: A(int i):i(i){
: cout<: }
: int get() const{
: cout<: }
: ~A(){

avatar
z*e
17
明白鸟。
这个东东又让我觉得精进了一步。

【在 X****r 的大作中提到】
: operator delete[] (p);
avatar
z*e
18
还想问一句,
默认的operator new[]里边是怎么开辟内存的?
默认的operator delete[] 呢?
我刚才是重载了这个两个东东,里边都用了malloc 和free。
但是默认的,里边是用的什么?

【在 X****r 的大作中提到】
: operator delete[] (p);
avatar
X*r
19
这个不是你的事。

【在 z****e 的大作中提到】
: 还想问一句,
: 默认的operator new[]里边是怎么开辟内存的?
: 默认的operator delete[] 呢?
: 我刚才是重载了这个两个东东,里边都用了malloc 和free。
: 但是默认的,里边是用的什么?

avatar
t*t
20
这个回答很有气势, 我喜欢! 下次我也这么答. It's not of your business!

【在 X****r 的大作中提到】
: 这个不是你的事。
avatar
z*e
21
master shifu,你这个说错了,应该是:
It's none of your business.
hehe.

【在 t****t 的大作中提到】
: 这个回答很有气势, 我喜欢! 下次我也这么答. It's not of your business!
avatar
z*e
22
好。有红猪侠坐镇,我就高枕无忧了。

【在 X****r 的大作中提到】
: 这个不是你的事。
avatar
t*t
23
i think both can be used.

【在 z****e 的大作中提到】
: master shifu,你这个说错了,应该是:
: It's none of your business.
: hehe.

avatar
z*e
24
恩。俺那个更像是英式的。

【在 t****t 的大作中提到】
: i think both can be used.
avatar
z*e
25
你好像又错了?
是不是
i think either can be used.
更好?
嘻嘻。

【在 t****t 的大作中提到】
: i think both can be used.
avatar
t*t
26
probably...

【在 z****e 的大作中提到】
: 你好像又错了?
: 是不是
: i think either can be used.
: 更好?
: 嘻嘻。

avatar
z*e
27
靠,thrust,你收了个女徒弟?

【在 z****e 的大作中提到】
: 你好像又错了?
: 是不是
: i think either can be used.
: 更好?
: 嘻嘻。

avatar
t*t
28
more like a tang monk and definitely not my apprentice.

【在 z***e 的大作中提到】
: 靠,thrust,你收了个女徒弟?
avatar
P*e
29
Tang monk不然真不好理解

【在 t****t 的大作中提到】
: more like a tang monk and definitely not my apprentice.
avatar
t*t
30
"Tang monk不然真不好理解"才真不好理解呢, 你说的是中文吗?

【在 P********e 的大作中提到】
: Tang monk不然真不好理解
avatar
G*A
31
1. If you want to create an array of class objects, the class must have
a default constructor.
2. try two ways:
const int STKS = n;
Myobject myobject[STKS] = {
Myobject(parm),
Myobject (parm),
Myobject (parm),
Myobject (parm),
};
or
you can use parm as default value in default constructor for easier
life:
Myobject::Myobject(int xxx=parm)
Myobject myobject[STKS];

【在 k*****l 的大作中提到】
: 假设myobject 只有一个带参数的constructor: myobject(int parm),
: ^^^^
: myobject * a =new myobject[n]
: 编译的时候说找不到 myobject() to initialize a vector.
: 试图加入参数: myobject * a =new myobject[n](parm)
: 又说 No initializer allowed for new of an array
: 请问有什么好办法解决这个问题?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。