复制构造函数失败...重载,动态分配

时间:2015-03-13 07:57:32

标签: c++ operator-overloading destructor copy-constructor

我正在使用动态字符串,复制构造函数和重载存在问题。 我正在使用运算符+来重载。重载函数用于插入两个char *字符串。 这里只是代码的摘录:

  MyString::~MyString()
  {
    delete[] text; //char *text, as my private data
  }
MyString::MyString(const MyString & obj)//copy constructor here
{
    text = new char[obj.len];
    for (int i = 0; i < obj.len; i++)
    {
        text[i] = obj.text[i];
    }
    len = obj.len;
}
MyString MyString::operator+(MyString & s)
{
    MyString temp;
    temp.len = len + s.len + 1;
    int i;
    for (i = 0; i < len; i++)
    {
        temp.text[i] = this->text[i];
    }
    for (int i = 0; i < s.len; i++)
    {
        temp.text[i + len] = s.text[i];
    }
    temp.text[len + s.len] = 0;
    return temp;//PROBLEM HERE
}

这是我的问题: operator +函数在返回temp之前调用复制构造函数和析构函数 虽然有一个复制构造函数返回的是一个deleted []数组。 什么是捕获?感谢

2 个答案:

答案 0 :(得分:1)

假设您有以下代码

MyString s1;  // Initialized to something
MyString s2;  // Initialized to something else

MyString s3 = s1 + s2;

然后表达式s1 + s2创建一个临时副本(由operator+函数返回的副本)。然后将此临时副本传递给复制构造函数,以通过销毁临时对象来创建s3 ,然后

无论如何这是理论,实际上编译器将 elide 复制。

答案 1 :(得分:-2)

进行这些更改并尝试: 1. temp.text [len + s.len] =&#39; \ 0&#39 ;; // Null终止

  1. MyString **&amp; ** MyString :: operator +(MyString&amp; s) { 。 。 。 } //通过引用返回,您将得到正确的结果。