k*****l 发帖数: 34 | 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
请问有什么好办法解决这个问题? |
t*******y 发帖数: 57 | 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 : 请问有什么好办法解决这个问题?
|
k*****l 发帖数: 34 | 3 en .我也这么想,同时还要填一个myobject::init(int parm)完成
带参数的constructor: myobject(int parm)一摸一样的工作。 够麻烦的。
关键问题是: 为什么c++不让 new myobject[n]带参数呢?? 实现上应该不难啊。这个
限制有什么特别的理由??
【在 t*******y 的大作中提到】 : 加一个啥也不干或者提供默认参数的constructor myobject()
|
N***m 发帖数: 4460 | 4 估计是new只负责分配空间?
可以用vector ob(n,myobject(parm))来实现。
这个
【在 k*****l 的大作中提到】 : en .我也这么想,同时还要填一个myobject::init(int parm)完成 : 带参数的constructor: myobject(int parm)一摸一样的工作。 够麻烦的。 : 关键问题是: 为什么c++不让 new myobject[n]带参数呢?? 实现上应该不难啊。这个 : 限制有什么特别的理由??
|
z****e 发帖数: 2024 | |
h****8 发帖数: 599 | 6 new 也负责调用constructor的
【在 N***m 的大作中提到】 : 估计是new只负责分配空间? : 可以用vector ob(n,myobject(parm))来实现。 : : 这个
|
N***m 发帖数: 4460 | 7 好像是的耶。搞不懂了。
【在 h****8 的大作中提到】 : new 也负责调用constructor的
|
h****8 发帖数: 599 | 8 我想问题在于,如果new可以接受N个参数作为constructor得参数,那么new本身的
signature怎么写?
【在 N***m 的大作中提到】 : 好像是的耶。搞不懂了。
|
p***o 发帖数: 1252 | 9 这个需求用operator new[]再加上placement new就好了。
【在 h****8 的大作中提到】 : 我想问题在于,如果new可以接受N个参数作为constructor得参数,那么new本身的 : signature怎么写?
|
f*****Q 发帖数: 1912 | |
|
|
h*****0 发帖数: 4889 | 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 : 请问有什么好办法解决这个问题?
|
z****e 发帖数: 2024 | 12 姐姐能不能给写一个?
我写个operator new[]怎么都没搞成。好像只能用一个argument in the parameter
list.
【在 p***o 的大作中提到】 : 这个需求用operator new[]再加上placement new就好了。
|
p***o 发帖数: 1252 | 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.
|
z****e 发帖数: 2024 | 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);
|
z****e 发帖数: 2024 | 15 怎么delete?
class A{
public:
A(int i):i(i){
cout<<"A::ctor"<
}
int get() const{
cout<
}
~A(){
cout<<"A::~A()"<
}
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;i
p[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);
|
X****r 发帖数: 3557 | 16 operator delete[] (p);
【在 z****e 的大作中提到】 : 怎么delete? : class A{ : public: : A(int i):i(i){ : cout<<"A::ctor"<: } : int get() const{ : cout<: } : ~A(){
|
z****e 发帖数: 2024 | 17 明白鸟。
这个东东又让我觉得精进了一步。
【在 X****r 的大作中提到】 : operator delete[] (p);
|
z****e 发帖数: 2024 | 18 还想问一句,
默认的operator new[]里边是怎么开辟内存的?
默认的operator delete[] 呢?
我刚才是重载了这个两个东东,里边都用了malloc 和free。
但是默认的,里边是用的什么?
【在 X****r 的大作中提到】 : operator delete[] (p);
|
X****r 发帖数: 3557 | 19 这个不是你的事。
【在 z****e 的大作中提到】 : 还想问一句, : 默认的operator new[]里边是怎么开辟内存的? : 默认的operator delete[] 呢? : 我刚才是重载了这个两个东东,里边都用了malloc 和free。 : 但是默认的,里边是用的什么?
|
t****t 发帖数: 6806 | 20 这个回答很有气势, 我喜欢! 下次我也这么答. It's not of your business!
【在 X****r 的大作中提到】 : 这个不是你的事。
|
|
|
z****e 发帖数: 2024 | 21 master shifu,你这个说错了,应该是:
It's none of your business.
hehe.
【在 t****t 的大作中提到】 : 这个回答很有气势, 我喜欢! 下次我也这么答. It's not of your business!
|
z****e 发帖数: 2024 | 22 好。有红猪侠坐镇,我就高枕无忧了。
【在 X****r 的大作中提到】 : 这个不是你的事。
|
t****t 发帖数: 6806 | 23 i think both can be used.
【在 z****e 的大作中提到】 : master shifu,你这个说错了,应该是: : It's none of your business. : hehe.
|
z****e 发帖数: 2024 | 24 恩。俺那个更像是英式的。
【在 t****t 的大作中提到】 : i think both can be used.
|
z****e 发帖数: 2024 | 25 你好像又错了?
是不是
i think either can be used.
更好?
嘻嘻。
【在 t****t 的大作中提到】 : i think both can be used.
|
t****t 发帖数: 6806 | 26 probably...
【在 z****e 的大作中提到】 : 你好像又错了? : 是不是 : i think either can be used. : 更好? : 嘻嘻。
|
z***e 发帖数: 5393 | 27 靠,thrust,你收了个女徒弟?
【在 z****e 的大作中提到】 : 你好像又错了? : 是不是 : i think either can be used. : 更好? : 嘻嘻。
|
t****t 发帖数: 6806 | 28 more like a tang monk and definitely not my apprentice.
【在 z***e 的大作中提到】 : 靠,thrust,你收了个女徒弟?
|
P********e 发帖数: 2610 | 29 Tang monk不然真不好理解
【在 t****t 的大作中提到】 : more like a tang monk and definitely not my apprentice.
|
t****t 发帖数: 6806 | 30 "Tang monk不然真不好理解"才真不好理解呢, 你说的是中文吗?
【在 P********e 的大作中提到】 : Tang monk不然真不好理解
|
|
|
G****A 发帖数: 4160 | 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 : 请问有什么好办法解决这个问题?
|