Witam.
Postanowiłem sobie przypomnieć co pamiętam z C++. Wybór padł na zrobienie macierzy. Nie będę rozpisywał się prozą wkleję kod:
Plik Matrix.h
#pragma once
class Matrix
{
private:
int m_rows;
int m_cols;
double **m_value;
public:
Matrix(int, int);
~Matrix();
};
Matrix::Matrix(int rows, int cols)
{
m_rows = rows;
m_cols = cols;
m_value = new double*[m_rows];
for (int r = 0; r < rows; r++)
{
m_value[r] = new double[cols];
}
for (int r = 0; r < m_rows; r++)
{
for (int c = 0; c < m_cols; c++)
{
m_value[r][c] = 1.0;
}
}
}
Matrix::~Matrix()
{
for (int r = 0; r < m_rows; r++)
{
delete[] m_value[r];
}
delete m_value;
m_rows = 0;
m_cols = 0;
}
Plik main.cpp
#include <iostream>
#include <cstdlib>
#include "Matrix.h"
int main()
{
//Version a
//Matrix a = Matrix(2, 3);
//a.~Matrix();
//Version b
//Matrix *b = new Matrix(2, 1);
//b->~Matrix();
system("pause");
return 0;
}
O ile kod w wersji b (wskaźnik) działa bez zarzutu, to gdy zostawię tylko wersję a, program wykrzacza mi się chyba na destruktorze, bo jak wyrzucę linijkę
a.~Matrix();
program się nie wykrzacza. Co może być przyczyną takiej sytuacji?