[C++] Inteligentne wskaźniki - unique_ptr
Ostatnio zmodyfikowano 2014-12-09 09:53
Kopczak1995 Temat założony przez niniejszego użytkownika |
[C++] Inteligentne wskaźniki - unique_ptr » 2014-12-09 08:39:37 Witam :) Dowiedziałem się ostatnio o istnieniu tzw inteligentnych wskaźników, które (jakie one kochane :P ) same usuwają po sobie alokację. Wszystko pięknie, bo to na prawdę fajna sprawa dla osoby, która na kolosach zawsze ale to zawsze zapomni usunąć alokacji :P Do rzeczy... Dopóki chodzi o stworzenie sobie osobnej zmiennej wskaźnikowej unique_ptr to nie ma problemu. Coś takiego do żadne wyzwanie: unique_ptr < std::string > p1( new string( "A taki tam wskaźniczek :>" ) ); Problem mam natomiast próbując stworzyć coś istotniejszego - mianowicie tablicę dynamiczną takich wskaźników... Dajmy na to - chciałbym wygenerować sobie macierz o wymiarach n na n. Jak mam to zrobić, bo powiedzmy, że się pogubiłem w swym zagmatwanym rozumowaniu... Coś tam kombinowałem ale domyślam się, że jest źle - kompilator już nie raz mnie o tym uświadomił :P int n { 10 }; int ** tab0 = new int *[ n ]; for( int i = 0; i < n; i++ ) { tab0[ i ] = new int[ n ]; }
unique_ptr < int **> tab = unique_ptr < int **>( new int **[ n ] ); for( int i = 0; i < n; i++ ) { tab[ i ] = unique_ptr < int *>( new int *[ n ] ); }
Także jak to powinienem zrobić i czy ew. ktoś mógłby mi wyłuszczyć co tak prawdę mówiąc robię źle? Byłbym wdzięczny :) |
|
darko202 |
» 2014-12-09 09:53:20 nie zajmowałem się wcześniej/używałem unique_ptr ale wydaje mi, że strona http://msdn.microsoft.com/pl-pl/library/hh279676.aspxodpowiada na Twoje pytanie mówi ona Obiekt unique_ptr nie udostępnia swojego wskaźnika. Nie można go skopiować do innego obiektu unique_ptr, przekazać przez wartość do funkcji ani wykorzystywać w ramach dowolnego algorytmu biblioteki standardowych szablonów (STL), który wymaga wykonania kopii. Obiekty unique_ptr mogą być tylko przenoszone. ... W związku z tym, jeśli potrzebujesz inteligentnego wskaźnika dla zwykłego obiektu języka C++, użyj unique_ptr, a podczas konstruowania wskaźnika unique_ptr użyj funkcji pomocnika make_unique. ..... Można użyć funkcji make_unique, aby utworzyć wskaźnik unique_ptr do tablicy, ale nie można użyć funkcji make_unique do zainicjowania elementów tablicy. przykład auto p = make_unique < int[] >( 5 );
for( int i = 0; i < 5; ++i ) { p[ i ] = i; wcout << p[ i ] << endl; }
|
|
« 1 » |