c++没有renew() 头大

x363635334 2014-03-25 10:12:05

class StringArray
{
String *m_sa;
int m_sz;
public:
StringArray();
};

StringArray::StringArray()
{
int x=sizeof(String);
m_sz=20; m_sa=(String*)malloc(sizeof(String)*m_sz);//本Array开辟20个String对象
m_sa[0]="";//调试发现等号左边String对象的私有成员变量没有初始化
}

书上说用new[] delete[] 这20个对象当时就自动调构造和析构了
但是本Array要支持再分配,所以选的 realloc malloc free这套
这种问题困扰着我
...全文
467 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
x363635334 2014-04-05
  • 打赏
  • 举报
回复
别吵了,结贴
敬畏者 2014-04-03
  • 打赏
  • 举报
回复
引用 16 楼 FrankHB1989 的回复:
[quote=引用 14 楼 u013573183 的回复:] [quote=引用 12 楼 FrankHB1989 的回复:] [quote=引用 6 楼 u013573183 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊[/quote] 你C艹没入坑吧。 C是相对比较烂,但也没烂到一定比C++烂的地步。 而且根本搞错重点了。 重写需要投入资源,而考虑上面的理由以及半吊子用户比例的现状,C改用C++重写出来的东西未必就能保证给你足够的好处满足现有需求。只会浪费时间的重复劳动可耻。 [/quote] 别瞎说,没有哪个语言是烂的,只能说有更好用的语言 人不行不要怪路不平,没技术写出高质量C++代码不代表C++是不好的,也并非是要重写,而是在新项目中用更好的方法实现. 除非只是想算个1+1这样没什么复杂性的题,否则C++比C强太多了,越复杂越明显,如果不复杂,算一个1+1 我想用手机还是用超级电脑没什么区别[/quote] 想象力啊想象力。 无论如何,只要知道怎么样让你无法满足需求,就可以构造出让你不得不承认烂的东西。 还没看出一个语言足够多的没法改进的缺陷的时候,要评论是不是好用也比较没说服力。 C++真正烂的地方的确和直接用户的关系相对不大(要说有也是智商兼容性不够Java之类糊弄用户的非技术问题),所以你要一口咬定不烂那也没什么好奇怪的。 不过如果没有耳闻过一般不适宜使用的场合,反而认为这些场合都能体现出优势,就有些说不过去了。 [/quote] 不要这么狂妄自大,照你的逻辑,你严重就没有不烂的语言 我相信再烂的语言的创作者其技术也比你强百倍 物有其位.我说的很清楚C在特定情况下比C++强,因为C++根本就用不成,其他C++都比C强很多.因为C++包含C并支持更高级的功能特性
FancyMouse 2014-04-03
  • 打赏
  • 举报
回复
你们歪楼丧心病狂
jackyjkchen 2014-04-02
  • 打赏
  • 举报
回复
好欢乐。。。
FrankHB1989 2014-04-02
  • 打赏
  • 举报
回复
引用 14 楼 u013573183 的回复:
[quote=引用 12 楼 FrankHB1989 的回复:] [quote=引用 6 楼 u013573183 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊[/quote] 你C艹没入坑吧。 C是相对比较烂,但也没烂到一定比C++烂的地步。 而且根本搞错重点了。 重写需要投入资源,而考虑上面的理由以及半吊子用户比例的现状,C改用C++重写出来的东西未必就能保证给你足够的好处满足现有需求。只会浪费时间的重复劳动可耻。 [/quote] 别瞎说,没有哪个语言是烂的,只能说有更好用的语言 人不行不要怪路不平,没技术写出高质量C++代码不代表C++是不好的,也并非是要重写,而是在新项目中用更好的方法实现. 除非只是想算个1+1这样没什么复杂性的题,否则C++比C强太多了,越复杂越明显,如果不复杂,算一个1+1 我想用手机还是用超级电脑没什么区别[/quote] 想象力啊想象力。 无论如何,只要知道怎么样让你无法满足需求,就可以构造出让你不得不承认烂的东西。 还没看出一个语言足够多的没法改进的缺陷的时候,要评论是不是好用也比较没说服力。 C++真正烂的地方的确和直接用户的关系相对不大(要说有也是智商兼容性不够Java之类糊弄用户的非技术问题),所以你要一口咬定不烂那也没什么好奇怪的。 不过如果没有耳闻过一般不适宜使用的场合,反而认为这些场合都能体现出优势,就有些说不过去了。
赵4老师 2014-03-31
  • 打赏
  • 举报
回复
没看出10楼C++代码比9楼C代码好在哪里。
敬畏者 2014-03-31
  • 打赏
  • 举报
回复
引用 12 楼 FrankHB1989 的回复:
[quote=引用 6 楼 u013573183 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊[/quote] 你C艹没入坑吧。 C是相对比较烂,但也没烂到一定比C++烂的地步。 而且根本搞错重点了。 重写需要投入资源,而考虑上面的理由以及半吊子用户比例的现状,C改用C++重写出来的东西未必就能保证给你足够的好处满足现有需求。只会浪费时间的重复劳动可耻。 [/quote] 别瞎说,没有哪个语言是烂的,只能说有更好用的语言 人不行不要怪路不平,没技术写出高质量C++代码不代表C++是不好的,也并非是要重写,而是在新项目中用更好的方法实现. 除非只是想算个1+1这样没什么复杂性的题,否则C++比C强太多了,越复杂越明显,如果不复杂,算一个1+1 我想用手机还是用超级电脑没什么区别
FrankHB1989 2014-03-31
  • 打赏
  • 举报
回复
引用 6 楼 u013573183 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊[/quote] 你C艹没入坑吧。 C是相对比较烂,但也没烂到一定比C++烂的地步。 而且根本搞错重点了。 重写需要投入资源,而考虑上面的理由以及半吊子用户比例的现状,C改用C++重写出来的东西未必就能保证给你足够的好处满足现有需求。只会浪费时间的重复劳动可耻。
FrankHB1989 2014-03-31
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 8 楼 zhao4zhong1 的回复:] [quote=引用 6 楼 u013573183 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊[/quote] 尺有所短,寸有所长。[/quote] 试用纯C++实现与下面代码完全一样的功能:
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
[/quote] 把这里的void改成int,<stdio.h>改成<cstdio>,然后加一堆std::就是所谓的纯C++了。
敬畏者 2014-03-26
  • 打赏
  • 举报
回复
计算机业发展迅猛,从你的代码中处处能看到陈旧的思想,而且与现实实践有些脱轨.现代软件开发真的是发展了很多,变化了太多 现代开发理念的代码是这样的

void outputResult( string word )
{
	stringstream wordStream{ word };
	int Number;
	if( wordStream >> Number )
	{
		cout << "Get Number: " << Number << endl;
	}
	else
	{
		cout << "Skip chars : " << word << endl;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	string source = "123 ab 4";
	string word;
	stringstream sourceStream{ source };
	while( sourceStream >> word )
	{
		outputResult( word );
	}

	return 0;
}


赵4老师 2014-03-26
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
[quote=引用 6 楼 u013573183 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊[/quote] 尺有所短,寸有所长。[/quote] 试用纯C++实现与下面代码完全一样的功能:
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
赵4老师 2014-03-26
  • 打赏
  • 举报
回复
引用 6 楼 u013573183 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊[/quote] 尺有所短,寸有所长。
zybjtu 2014-03-26
  • 打赏
  • 举报
回复
再分配可以手动啊,为嘛非要调用接口。new了新的空间,搬过去,delete原来的,就ok了
敬畏者 2014-03-26
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
你这神坑怎么当大钻的,这太令人惊奇了 除非是编译器或运行环境不支持,否则肯定是C++强的多啊
敬畏者 2014-03-26
  • 打赏
  • 举报
回复
不要自己不知道的就说没有 你需要学习 allocator类 定位new
ForestDB 2014-03-26
  • 打赏
  • 举报
回复
m_sz = 20; m_sa = new String[m_sz];
buyong 2014-03-26
  • 打赏
  • 举报
回复
realloc可以用分配更大的new,然后copy的方式取代。
赵4老师 2014-03-26
  • 打赏
  • 举报
回复
记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
JiMoKuangXiangQu 2014-03-25
  • 打赏
  • 举报
回复
为什么不用vector或者类似数据结构?

33,312

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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