社区
C语言
帖子详情
对象初始化的问题。
icuc88
2003-06-23 04:49:10
string *stringArray1 =
static_cast<string *>(malloc(10 * sizeof(string)));
这个怎么初始化这个malloc出来的东西?
我知道有string *stringArray1 = new string[10];这个东西,但是现在是上面的问题。欢迎大家讨论。
谢谢!
...全文
81
19
打赏
收藏
对象初始化的问题。
string *stringArray1 = static_cast(malloc(10 * sizeof(string))); 这个怎么初始化这个malloc出来的东西? 我知道有string *stringArray1 = new string[10];这个东西,但是现在是上面的问题。欢迎大家讨论。 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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的
C++类中定义
对象
初始化
问题
教材中写道:创建类的
对象
时,如果这个类具有内嵌
对象
成员,那么各个内嵌
对象
的首先被自动创建(调用本类的构造函数时,首先对当前类中的
对象
初始化
,然后对本类
初始化
)。对于本类中
对象
的
初始化
,应当把
对象
写在本...
java
对象
初始化
顺序
java
对象
初始化
顺序一、java
对象
初始化
顺序二、非继承关系中的
初始化
顺序1.实例三、继承关系中的
初始化
顺序1.实例四、
初始化
顺序图标1.非继承关系:2.继承关系: 一、java
对象
初始化
顺序 java
对象
初始化
的执行顺序...
C++中的
对象
初始化
对象
初始化
可以分为默认
初始化
、直接
初始化
、拷贝
初始化
以及值
初始化
。 // (1)默认
初始化
int i1;//默认
初始化
,在函数体之外(
初始化
为0) int f(void) { int i2;//不被
初始化
,如果使用此
对象
则报错 }...
深入理解Java
对象
的创建过程:类的
初始化
与实例化
在Java中,一个
对象
在可以被使用之前必须要被正确地
初始化
,这一点是Java规范规定的。在实例化一个
对象
时,JVM首先会检查相关类型是否已经加载并
初始化
,如果没有,则JVM立即进行加载并调用类构造器完成类的
初始化
。...
C++中
对象
初始化
方式
当
对象
在创建时获得了一个特定的值,我们说这个
对象
被
初始化
。
初始化
不是赋值,
初始化
的含义是创建变量赋予其一个初始值,而赋值的...
对象
初始化
可以分为默认
初始化
、直接
初始化
、拷贝
初始化
以及值
初始化
。 1,...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章