对象初始化的问题。

icuc88 2003-06-23 04:49:10
string *stringArray1 =
static_cast<string *>(malloc(10 * sizeof(string)));

这个怎么初始化这个malloc出来的东西?

我知道有string *stringArray1 = new string[10];这个东西,但是现在是上面的问题。欢迎大家讨论。

谢谢!
...全文
81 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
icuc88 2003-09-14
  • 打赏
  • 举报
回复
虽然大家都没有回答我的问题,但是对于参与的人,还是给分。

谢谢!
icuc88 2003-06-24
  • 打赏
  • 举报
回复
不知道大家看了《Effective C++》没有?见条款3。 Prefer new and delete to malloc and free.

书上用“不可思议”四个字来形容初始化工作。所以觉得奇怪,如何不可思议?
winapp 2003-06-24
  • 打赏
  • 举报
回复
liu_feng_fly(笑看风云 搏击苍穹 衔日月) 说得清楚了。
19830711 2003-06-24
  • 打赏
  • 举报
回复
清零
liu_feng_fly 2003-06-24
  • 打赏
  • 举报
回复
malloc和new的区别是malloc仅仅分配内存,而new在分配内存的基础上调用类的构造函数。而placement new的特点就是在指定的位置(内存地址)上调用类的构造函数
ovisa 2003-06-24
  • 打赏
  • 举报
回复
楼主错了,按照你的意思,这个问题的重点是类型转换,和初始化没有关系
icuc88 2003-06-24
  • 打赏
  • 举报
回复
string 是一个类吧?类在malloc后怎么初始化呢?这个就是我的问题。
蝎子i软件 2003-06-24
  • 打赏
  • 举报
回复
我的理解:
malloc完了,给它赋值不就ok了?

不知道楼主说的初始化是什么意思?
new好像是系统自动初始化,//也就是赋默认值
malloc则只分配空间。
初始化不就是赋值么?
那你就自己赋值呗。

一孔之见。
hello_wyq 2003-06-24
  • 打赏
  • 举报
回复
for (int i = 0; i < 10; ++ i)
stringArray1[i].init();
你自己要写一个init函数。
icuc88 2003-06-24
  • 打赏
  • 举报
回复
还有更新的解释?
liao2001 2003-06-24
  • 打赏
  • 举报
回复
先申明,我是菜鸟,下面是个人想法:
1。c++中初始化是由构造函数来实现的,何处调用构造函数是由编译器/链接器生成exe代码时根据相应语法规则决定的,c++中构造函数是和存储分配组合起来用的.
2。new会在分配内存后主动调用构造函数,其实这也是开发c++语言的大师立定的规则,目的是防止没经过初始化而引起不必要的错误(不正确的初始化是程序出错的主要原因).
3。开发malloc的大师的没有考虑到我这种类型的菜鸟,以为我记得去初始化,可我。。。
4。搂主的问题是“如何在malloc后初始化?”,我觉得可以自己写个初始化函数来解决,当然我说的初始化不是调用构造函数,而是像构造函数那样赋个空串。
5。“不可思议”?不可思议可能是说c++帮你作了一些你常常容易忘记且隐含问题的事情吧,这样你就可以放心的关心你的算法功能了。
bares 2003-06-23
  • 打赏
  • 举报
回复
首先,我认为这种用法不规范,最好别用。
如果确实需要,按liu_feng_fly(笑看风云 搏击苍穹 衔日月) 说的就可以。
liu_feng_fly 2003-06-23
  • 打赏
  • 举报
回复
初始化要使用placement new,比如
new(stringArray1)(...);
初始化第一个string,...是构造函数的各种参数,如果为空就是用默认的构造函数
new(stringArray1 + sizeof(string)(...)
初始化第二个。
释放的时候,要在free前面分别调用初始化过的string的析构函数
stringArray1->~string();
(stringArray1+sizeof(string))->~string();
当然,string 是typedef出来的,那么对析构函数的调用也要进行相应的调整,可能要写成
~basic_string<char>;(猜测,没有实验)
一般内存池就是这样管理内存的,很麻烦,容易出错。
最好直接使用vector<string>
njuhuangmy 2003-06-23
  • 打赏
  • 举报
回复
不会

不如 直接给它 赋值 得了

一定 要 初始化 嘛 ??
summer6074 2003-06-23
  • 打赏
  • 举报
回复
那个 static_cast<string *>有点象我们古代用的(string*),不过,听lippman老大说,它比原来那个安全一些。然后他讲了一大堆,我看得睡着了。你有兴趣去看《c++primer》好了,呵呵
icuc88 2003-06-23
  • 打赏
  • 举报
回复
倒!!!又一个没有看清问题的。
我的问题是:

string *stringArray1 =
static_cast<string *>(malloc(10 * sizeof(string)));

这个怎么初始化这个malloc出来的东西?
这个怎么初始化这个malloc出来的东西?
这个怎么初始化这个malloc出来的东西?

关键词:初始化

lzh7800 2003-06-23
  • 打赏
  • 举报
回复
malloc和new一样都是由你来分配空间,但是malloc没有调用string的构造函数,
仅仅分配了空间。
static_cast<string *>(malloc(10 * sizeof(string)));
分配了10个string对象空间,由malloc分配,是void型指针,然后再把指向数组的第一个元数地址的指针强制转换成指向string型的指针。
icuc88 2003-06-23
  • 打赏
  • 举报
回复
对了,请先看清楚问题好吗?
楼上的就是对问题不清楚的表现得最好的例子:)
devzhao 2003-06-23
  • 打赏
  • 举报
回复
new是C++的
malloc是C的

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧