社区
C语言
帖子详情
对象初始化的问题。
icuc88
2003-06-23 04:49:10
string *stringArray1 =
static_cast<string *>(malloc(10 * sizeof(string)));
这个怎么初始化这个malloc出来的东西?
我知道有string *stringArray1 = new string[10];这个东西,但是现在是上面的问题。欢迎大家讨论。
谢谢!
...全文
96
19
打赏
收藏
对象初始化的问题。
string *stringArray1 = static_cast(malloc(10 * sizeof(string))); 这个怎么初始化这个malloc出来的东西? 我知道有string *stringArray1 = new string[10];这个东西,但是现在是上面的问题。欢迎大家讨论。 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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的
java六大必须理解的
问题
文档
- **
初始化
时机**:静态变量在类加载时
初始化
,而实例变量则在创建
对象
时
初始化
。 - **内存分配**:静态变量只有一份拷贝,而实例变量对于每个
对象
都有一份拷贝。 通过以上六个方面的详细解释,我们不仅深入了解了...
Thinking_in_java中文第4版(Word完全版)
8. **
初始化
与清除**:
初始化
和垃圾回收机制在Java中非常重要,书中讨论了如何正确
初始化
对象
,何时使用构造器,以及如何利用final关键字和finalize()方法进行资源清理。 9. **隐藏实现过程**:通过包和访问修饰符...
javax.servlet jar包---解决找不到javax.servlet.*等
问题
-
初始化
:当Servlet首次被请求或者在web.xml中配置了`load-on-startup`时,Servlet容器会调用Servlet的`init()`方法进行
初始化
。 - 服务:每当有新的请求到来,Servlet容器创建一个Servlet实例,然后调用`service...
hibernate4.2-jar包.zip
总结,"hibernate4.2-jar包.zip"揭示了Hibernate 4.2版本的实现细节,包括其核心组件、工作流程、配置与
初始化
、实体持久化、查询方式以及缓存机制等。理解并熟练运用这些知识点,对于提升Java应用的数据访问效率和...
JAVA
对象
初始化
步骤
文章目录前言一、
对象
初始化
步骤二、实例三、特殊案例四、枚举类
初始化
前言 在面向
对象
的编程语言中,了解
对象
初始化
的步骤有利于我们更好地写成代码。 一、
对象
初始化
步骤 父类静态变量、静态代码块
初始化
...
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章