Cześć :)
Załóżmy, że mam taką funkcję:
std::pair<std::unique_ptr<Matrix>, std::unique_ptr<Matrix>> decomposeMatrix( const Matrix& toDecompose){
std::unique_ptr<Matrix> first = std::make_unique( /* JAKOS TAM DEKOMPONUJ toDecompose);
std::unique_ptr<Matrix> second = std::make_unique( /* JAKOS TAM DEKOMPONUJ toDecompose);
return std::make_pair<std::unique_ptr<Matrix>, std::unique_ptr<Matrix> >( first, second);
}
-
Jak widać nasza funkcja ma za zadanie zdekomponować macierz pobraną jako argument. I teraz ponieważ te obiekty mogą być bardzo duże nie możemy sobie pozwolić na zwracanie przez wartość, aby uniknąć kopiowania ( zapominamy na chwilę o RVO/NRVO). W takim razie, czy to co zaprezentowałem jest ok? Tzn. zwracanie unique_ptr. Czy to jest ok? Czy lepiej zwracać RAW Pointer typu Matrix*?
Mówiąc ogólnie:
Nie mam doświadczenia w programowaniu komercyjnym i nie wiem czy takie cos to jest WTF czy też nie. Dlatego też pytanie jest- jak zrobić to najlepiej? -
Dobrze myślę, że przy takiej postaci funkcji wywołane będa move konstruktory dla std::unique_ptr?