这个代码有什么问题?

#include <iostream>
#include<string>
using namespace std;

class String
{
public:
    String(const char *str=NULL);
    String(const String &r);
    ~String()
    {
        cout<<"xigou"<<mydata<<endl;
    }
    int getSize();
private:
    char *mydata;
    int size;
};
String::String(const char *str)
{
    cout<<"gouzao "<<str<<endl;
    size=sizeof(str);
}
String::String(const String &r)
{
    size=r.size;
    mydata=new char[size];
    for(int i=0;i<size;i++)
    {
        mydata[i]=r.mydata[i];
    }
    cout<<"kaobei gouzao"<<mydata<<endl;
}
int main()
{
    String s1,s2("hello");
    String s3(s2);
    return 0;
}


eqeqw
浏览 1144回答 1
1回答

qq_啊你竟然丶_0

你没有搞清楚sizeof()的用法;第22行,--------------size=sizeof(str);----这里的str是指针,并不是数组,size会等于4,导致你第二个构造函数new的空间跟预想产生出入,建议用string的str.size()或者strlen()都可以,还有定义构造函数时私有成员没有全部初始化,很危险;再有就是new了之后一定要delete,在析构函数里;暂时就这些了,按照这个思路改应该差不多
打开App,查看更多内容
随时随地看视频慕课网APP