hyetpang 2016-05-13 12:04 采纳率: 39.4%
浏览 1197

C++析构和深拷贝的问题

#include <iostream>
#include <cstring>

using namespace std;

class MyString{
private:
    char *p_string;
    int str_length;
public:
    MyString(char *origin);
    ~MyString(){
        if(p_string != NULL){
            delete []p_string;
            cout<< "析构函数被调用"<< endl;
        }
    }
    char* getP_string(){
        return p_string;
    }
    void print_Add(){
        cout<< &p_string<< endl;
    }
    void set_p(char* origin){
        int l = strlen(origin);
        if(l <= strlen(p_string)){
            p_string = origin;
        }else{
            str_length = l;
            delete []p_string;
            p_string = new char[l + 1];
            strcpy(p_string, origin);
        }
    }
};
MyString::MyString(char *origin){
    str_length = strlen(origin);
    p_string = new char[str_length + 1];
    strcpy(p_string, origin);
    p_string[str_length] = '\0';
    cout<< "构造函数被调用"<< endl;
    //cout<< &p_string<< endl;
}

int main(){
    MyString iteral("iteral");
    MyString copy(iteral);
    copy.set_p("Hello");
    cout<< iteral.getP_string()<< endl;
    cout<< copy.getP_string()<< endl;
    return 0;
}

上面这段代码,为什么在执行时,加入了析构函就报错?还有就是为什么我没写深拷贝构造函数,为什么两个对象中的指针分别指向的是不同的内存?

  • 写回答

2条回答 默认 最新

  • huatian5 2016-05-13 12:26
    关注

    你又重新申请内存了,这就使用了深拷贝构造函数了。
    而且,你的构造函数里面不需要加上'\0'了吧。
    以前写类的时候也犯过写入析构函数就报错的情况,具体忘了,你再看看吧

    评论

报告相同问题?

悬赏问题

  • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
  • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  • ¥15 知识蒸馏实战博客问题
  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案