游戏开发论坛

 找回密码
 立即注册
搜索
查看: 15379|回复: 17

C++中的用new来创建带参对象数组的问题。

[复制链接]

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2005-4-16 11:14:00 | 显示全部楼层 |阅读模式
我在c++中写了一个类,使用了一个带参构造函数。

如何在new一个数组的时候,调用这个带参构造函数?
比如
class A
{
    int m_b;
public:
    A( int b ):m_b(b){}
};

A * pArray = new A[20];//    这里怎么把参数b放进去呢?

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20686
发表于 2005-4-16 11:30:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

好像不能用new。。。 看来我也得去温习一下C++

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
 楼主| 发表于 2005-4-16 11:36:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

难办啊~~

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20686
发表于 2005-4-16 11:45:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

可以不带构造行参,直接构造,然后类创建出来后再进行初始化。

62

主题

296

帖子

302

积分

中级会员

Rank: 3Rank: 3

积分
302
QQ
发表于 2005-4-16 12:20:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

小子现在怎么不上msn了~~
可以这样做:A pArray[] = {A(0), A(1), A(2)......}
不过数量一多就不好办了,还是用老大的方法

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
 楼主| 发表于 2005-4-16 12:30:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

需要的是动态的数量,哎,只能用默认构造了。。。。。

0

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
QQ
发表于 2005-4-16 13:19:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

楼主可以考虑一下使用带参数的operator new:
A * pA;
char * pOrig = new char [sizeof (A) * n];
pA = reinterpret_cast <A *> (pOrig);
for (int i = 0; i < n; ++i)
{
  new A (pA) A (参数);
  ++pA;
}
pA = reinterpret_cast <A *> (pOrig);

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2005-4-16 20:59:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

这个问题在c++经典里有说到哦。
我虽然看了,不过又忘了~~

既然你没有提供默认的构造函数,那么说明你需要确定值得对象,那么你实际上要为每一个数组中的对象都给定值,那么就一个一个来初始化吧。

问题是如何将对象连续在一起,也就是类似数组的结构。
new (sizeof(A) * n)//不知道这是不是分配一串空间的语法。
然后在用指针指向这段空间,就可以实现类似数组的结构了。
不过不知道这和真的数组有没有分别。

0

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
QQ
发表于 2005-4-16 23:08:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

看了茹枫兄的回复,我想还可以这样,可能简单一些:
vector <A *> vA;
for (int i = 0; i < n; ++i)
{
    A * pA = new A (参数);
    vA.push_back (pA);
}

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2005-4-17 01:18:00 | 显示全部楼层

Re:C++中的用new来创建带参对象数组的问题。

C++规定 new 数组的时候一定 调用 默认的构造函数 ...好象是没有办法绕开...
所以我是从默认构造函数的入手的
好象比较多的解决办法是重载 new[]?
class A
{
//----在类里插入如下代码,delete[]的重载没写
static s_m;
public:
static void * operator new[](size_t size)
  { return :perator new(size); }
  static void * operator new[](size_t size,int k)
  {   s_m = k;   return ::operator new(size); }
   A(){ m=s_m;}
//-----------------------------------------------------------
private:
    int m_b;
public:
    A( int b ):m_b(b){}
};
用的时候这么 new(99) A[20]
还使用模版的template<int i> 来做这个事,不过对代码破坏很大.

当然也可以什么都不用,在初始化以前手工 指定A::s_m的值...

不过这些风格都是不正确的,根据前辈的经验,内存使用有一定复杂性的时候就应该内存管理,这个时候使用std的vector或许不错,如果不符合要求也应该自己写内存管理,不然程序写大一点的时候就会杂乱无章,自己都没有心情看下去,我的就是这样.

不知道有没其他非默认构造函数的方法?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 10:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表