死活也写不出这个白痴类的构造函数与析够函数

chenzhengxi001 2004-11-02 11:33:18
class str{
public:
str(const char* mm){
value=new char[strlen(mm)+1];
strcpy(value,mm);
}
~str()
{
delete []value;
}
private:
char* value;
};
int main()
{
str abc("kao");
vector<str> tt;
tt.push_back(abc);
/*
string def("kaokao");
vector<string> dd;
dd.push_back(def);
*/
}
大家看啊
我的str在最后先析够,然后是vector析够,那还析个毛阿,memory错误。
但是string却能保证先让vector析够,再析够string.string的析够函数就吊大。
这个析够函数到底怎么写?????
另外别问我干吗不用string?
...全文
234 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicknide 2004-11-03
  • 打赏
  • 举报
回复
恩……

楼主已经道歉了……

所以不打算计较了……

郑重谢谢大家关注了……

chenzhengxi001 2004-11-03
  • 打赏
  • 举报
回复
没办法
没老师
没书
什么也不懂
都急死我了
可以想象几天几夜就为了这么个自认为简单的东西的感觉.
我都想砸电脑了
yyj1982 2004-11-03
  • 打赏
  • 举报
回复
楼主,唉.....
ZYMX 2004-11-03
  • 打赏
  • 举报
回复
sp,楼主有点不厚道
tiefan 2004-11-03
  • 打赏
  • 举报
回复
呵呵,楼主,真是这样么
nicknide 2004-11-03
  • 打赏
  • 举报
回复
大家说这种人应不应该鄙视之?

听大家的~~~
nicknide 2004-11-03
  • 打赏
  • 举报
回复
下面是我对他问题的回答:



明白STL中的vector的使用要求吗?你实现了复制构造函数没有?

复制构造函数都没有,怎么能够保证安全呢?你这里面用了动态申请的资源,必须实现你自己的复制构造函数,否则当然出现运行时错误啦,这个是显而易见的。

class czx
{
public:
czx(char* v)
{
v_ = new char[strlen(v)+1];
strcpy(v_,v);
}

czx(const czx& o)
{
v_ = new char[strlen(o.v_)+1];
strcpy(v_,o.v_);
}

czx&
operator = (const czx& o)
{
if (&o != this)
{
delete []v_;
v_ = new char[strlen(o.v_)+1];
strcpy(v_,o.v_);
}
return *this;
}

~czx()
{
delete []v_;
}

private:
char* v_;
};

这样子看看吧……
不要认为是系统的问题,决大部分情况下,是自己的疏忽!!!
nicknide 2004-11-03
  • 打赏
  • 举报
回复
终于找到楼主你这丫了……

鄙视你…………

不尊重别人劳动成果!!

我在其它论坛回答了他的问题,结果他不感谢也还罢了,竟然怪我回答晚了……

以下是他的原话:


早说吗!!!!
今天上csdn才知道
什么浅拷贝,深拷贝
写个复制构造函数就搞定了。
fangrk 2004-11-02
  • 打赏
  • 举报
回复
str& operator=(const str& rhs)
{
if(this!=&rhs){
char* p=new char[strlen(rhs.value)+1];
delete [] value;
value=p;
strcpy(value,rhs.value);
}
return *this;
}
freefalcon 2004-11-02
  • 打赏
  • 举报
回复
不是析构函数的问题
主要是缺少拷贝构造函数(vector内部会使用),如果你没有提供的话,编译器将使用bitwise拷贝方式

拷贝函数大致如下
str(const str& rhs){
value=new char[strlen(rhs.value)+1];
strcpy(value,rhs.value);
}

另外,你最好也实现operator=的重载
可以参见string的实现
sharkhuang 2004-11-02
  • 打赏
  • 举报
回复
STL有STL的原则
lynnboy 2004-11-02
  • 打赏
  • 举报
回复
一般原则:
一旦你的类中有动态分配的对象或资源,比如new的指针,打开的文件等等,一定要写全所有四个关键成员:构造,拷贝构造,赋值,析构。
这个是涉及到浅拷贝/深拷贝语义与资源生存期的问题。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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