Contesto: Ho questa classe Matrix qui:
notare la riga
che ritorna un shared_ptr ad un vector<vector<double>> nell'heap.
Il problema con questo sistema è che nelle funzioni mi ritrovo a fare chiamate brutte da vedere, tipo
Se però modifico quel getter in
allora posso scrivere
Che è più in linea con quello che vorrei ottenere.
Solo che non sono ancora tanto pratico con shared_ptr, quindi volevo sentire i vostri pareri per capire se è una buona idea o qualcosa che dovrei evitare, visto che mi pare che così sto bypassando la protezione offerta dallo shared_ptr.. :look::look:
Altra cosa, se invece scrivo Array2D senza il &
il vector viene ritornato by value e quindi non è più un problema, giusto?
CSS:
#include <initializer_list>
#include <vector>
#include <memory>
#include <iostream>
using Array2D = std::vector<std::vector<double>>;
class Matrix
{
public:
Matrix(unsigned rows, unsigned columns, std::initializer_list<double> elements);
~Matrix();
inline unsigned rows()const { return _rows; }
inline unsigned columns()const { return _columns; }
inline std::shared_ptr<Array2D> matrix()const { return _matrix; }
//Overloaded Operators
friend inline std::ostream& operator<<(std::ostream& stream, const Matrix& M);
private:
unsigned _rows;
unsigned _columns;
std::shared_ptr<Array2D> _matrix = nullptr;
};
notare la riga
CSS:
inline std::shared_ptr<Array2D> matrix()const { return _matrix; }
Il problema con questo sistema è che nelle funzioni mi ritrovo a fare chiamate brutte da vedere, tipo
CSS:
(*mM.matrix())[I][J++] = (*M.matrix())[i][j];
Se però modifico quel getter in
CSS:
inline Array2D& matrix()const { return *_matrix; }
allora posso scrivere
CSS:
mM.matrix()[I][J++] = M.matrix()[i][j];
Solo che non sono ancora tanto pratico con shared_ptr, quindi volevo sentire i vostri pareri per capire se è una buona idea o qualcosa che dovrei evitare, visto che mi pare che così sto bypassando la protezione offerta dallo shared_ptr.. :look::look:
Altra cosa, se invece scrivo Array2D senza il &
CSS:
inline Array2D matrix()const { return *_matrix; }
Ultima modifica: