Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Inteligentne wskaźniki - unique_ptr

Ostatnio zmodyfikowano 2014-12-09 09:53
Autor Wiadomość
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
C/C++
//także coś takiego:
int n { 10 };
int ** tab0 = new int *[ n ];
for( int i = 0; i < n; i++ ) {
    tab0[ i ] = new int[ n ];
}
//(^^wiadomo, potem usuwamy, choć gdy trzeba to o tym zapominam -.-)
//chciałbym utworzyć przy uzyciu unique_ptr... no i słabo idzie :P
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 :)
P-122573
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.aspx
odpowiada 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
C/C++
// Create a unique_ptr to an array of 5 integers.
auto p = make_unique < int[] >( 5 );

// Initialize the array.
for( int i = 0; i < 5; ++i )
{
    p[ i ] = i;
    wcout << p[ i ] << endl;
}
P-122574
« 1 »
  Strona 1 z 1