游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 谜の名侦探

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

[复制链接]

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

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

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

谁知道为什么c++里不允许数组使用非默认构造函数呀?讲解一下...

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
发表于 2005-4-17 10:58:00 | 显示全部楼层

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

我也不知道,哪位前辈指点一下。
而且动态分配的数组需要的内存总是由全局的new来分配的,所以自己重载一个new[],有用吗?

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2005-4-17 17:29:00 | 显示全部楼层

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

在<memory>中有个allocator的类里面有分配空间和单独调用其构造函数的能力,其实质就是使用定位new。

8

主题

130

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2005-4-18 09:40:00 | 显示全部楼层

那里是不就可以的,必需要求有无参构造器

可以先申请空间,
void *pArr = new int[sizeof(A)*20];
for( int i = 0; i < 20; i++ )
   new ( &pArr )A( b );
A *pArray = (A *)pArr;

或者,你可以不要直接用对象数组,用指针数组好了,然后一个个的new

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2005-4-20 01:40:00 | 显示全部楼层

我有个不太优雅的办法,相信这个模板可能会有用。我不


#include <stdio.h>
#include <stdlib.h>

class A
{
public:
        int m_b;
public:
        A( int b ):m_b(b){}
};

template <int INITVALUE,typename BASE> struct B : public BASE{B():A(INITVALUE){}};

int main(int argc,char *argv[])
{
        A * pArray = new B<12,A>[20];
        for(int i=0;i<20;i++)
        {
                printf("%d is %d\n",i,pArray.m_b);
        }
        return 1;
}

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2005-4-20 02:08:00 | 显示全部楼层

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

果然是好方法
^_^

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2005-4-20 08:49:00 | 显示全部楼层

假如使用vector的话,更简单啦

class A
{
public:
        int m_b;
public:
        A( int b ):m_b(b){}
};

template <int INITvalue,typename BASE> struct B : public BASE{B():A(INITvalue){}};

int main(int argc,char *argv[])
{
        A * pArray = new B<12,A>[20];
        for(int i=0;i<20;i++)
        {
                printf("%d is %d\n",i,pArray.m_b);
        }
//==============LOOK THIS!!!
        std::vector<A> aVec(20,A(12));
        for(std::vector<A>::iterator it=aVec.begin();it!=aVec.end();it++)
        {
                A &a=*it;
                printf("%d\n",a.m_b);
        }
        return 1;
}

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2005-4-20 09:17:00 | 显示全部楼层

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

既然你想创建带参的数组,就证明所有的对象都拥有这个这个相同的参数,那不如把这个参数作为你的静态成员变量,再声明一个 Init 或者 Create 函数,再依次调用。
另外,如果你一次就声明某各类的很多实例,就需要这个对象的管理器,所以,在这里你可以把创建对象的工作委托给管理器,把这个参数传给管理器。
看到上面很多人都给出了答案,甚至连模版都用上了,我觉得有时候不要专牛角尖,换个思路就很容易解决问题,这也是程序员应该具有的能力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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