我是C++的noob。我有一個我無法解決的問題。我寫了一個代碼,以瞭解更好的類和過載運算符:對象崩潰的破壞者
#include <iostream>
#include <stdlib.h>
#include <stdarg.h>
using namespace std;
class vectmy {
public:
int size;
int *a;
vectmy(int n,int val);
~vectmy(){delete[] a; //IF I DELETE THIS PROGRAM WORKS
}
vectmy & operator = (const vectmy &);
};
vectmy::vectmy(int n,int val){
size=n;
a = new int[ n+1 ];
for (int i=0;i<n;++i){
*(a+i)=val;
}
}
vectmy& vectmy::operator= (const vectmy& param)
{
for (int i=0;i<3;++i) a[i]=param.a[i];
return *this;
}
vectmy operator+(vectmy left, vectmy right)
{
vectmy result = left;
for (int i=0;i<3;++i) result.a[i]=result.a[i]+right.a[i];
return result;
}
int main() {
int b1[3]={1,2,4};
vectmy d(3,2),b(3,4),c(3,0);
c=(b+d);
for (int j=0; j<3; ++j)cout<<c.a[j]<<' '<<endl;
return 0;
}
當我運行它崩潰。如果我刪除它的析構函數。爲什麼會發生?
按照[三規則(http://en.wikipedia.org /維基/ Rule_of_three_%28C%2B%2B_programming%29)。你需要一個拷貝構造函數。 – juanchopanza 2013-04-20 11:30:06
[三條法則是什麼?]可能重複(http://stackoverflow.com/questions/4172722/what-is-the-rule-of-reeree) – juanchopanza 2013-04-20 11:33:54