Kiedy destruktor wchodzi do gry to dostaje błąd. Chce opróżnić w moim przypadku wsk. Nie potrafię zrozumieć, czy źle staram się usunąć ten wsk, a może błąd leży gdzieś indziej?
Mój program ma za zadanie dodać do siebie poprzez operator + dwa punktnD, które mają w sobie wymiar i zależną od niego dynamiczną tablicę.
#include <iostream>
using namespace std;
class punktnD {
int wymiar;
int* wsk;
public :
static int liczbaObiektow;
public:
punktnD(int n=2) :wymiar(n), wsk(new int[wymiar]) {
liczbaObiektow++;
cout << "konstruktor domyslny" << endl;
cout << "wsk - " << *wsk << endl;
}
punktnD(const punktnD & pkt):wymiar(pkt.wymiar), wsk(new int[wymiar]) {
int* tmp1 = pkt.wsk;
int* tmp2 = wsk;
for (int i = 0; i < wymiar; i++) {
tmp2[i] = tmp1[i];
}
cout << "konstruktor kopiujacy" << endl;
liczbaObiektow++;
}
~punktnD() {
liczbaObiektow--;
delete [] wsk;
}
friend punktnD operator + (const punktnD& pkt1, const punktnD& pkt2) {
punktnD pkt;
if (pkt1.wymiar < pkt2.wymiar)
pkt.wymiar = pkt2.wymiar;
else pkt.wymiar = pkt1.wymiar;
int* tmp1 = pkt1.wsk;
int* tmp2 = pkt2.wsk;
int* tmp3 = pkt.wsk;
for (int i = 0; i < pkt.wymiar; i++) {
tmp3[i] = tmp1[i] + tmp2[i];
}
return pkt;
}
friend istream& operator >> (istream& kl, punktnD& pkt) {
for (int i = 0; i < pkt.wymiar; i++) {
cout << "podaj " << i << " element" << endl;
cin >> pkt.wsk[i];
}
return kl;
}
friend ostream& operator << (ostream& kl, punktnD& pkt)
{
for (int i = 0; i < pkt.wymiar; i++) {
cout << "element " << i << " :" << pkt.wsk[i]<< endl;
}
return kl;
}
};
int punktnD::liczbaObiektow = 0;