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

Problem z dynamicznym dodawaniem obiektów do vectora

Ostatnio zmodyfikowano 2014-12-01 10:19
Autor Wiadomość
dek12
Temat założony przez niniejszego użytkownika
Problem z dynamicznym dodawaniem obiektów do vectora
» 2014-11-27 20:56:42
siema, mam sobie klasę np:
C/C++
class test
{
public:
    int liczba1, liczba2;
    test( int a, int b )
    {
        liczba1 = a;
        liczba2 = b;
    }
};

Teraz tworzę wektor
C/C++
std::vector < std::unique_ptr < test >> Test;
I teraz w pętli chciałbym tworzyć nowy obiekt klasy test i dodawać go do wektora, jak to zrobić?
C/C++
for( int i = 0; i < 5; i++ )
     Test.push_back( new < test > a( 12, 24 ) );

To nie działa, możecie coś pomóc?
P-121571
Monika90
» 2014-11-27 21:26:05
jeżeli masz dostatecznie nowy kompilator, zrób tak:
C/C++
Test.push_back( std::make_unique < test >( 12, 24 ) );

a jak nie masz, to tak:
C/C++
Test.push_back( std::unique_ptr < test >( new test( 12, 24 ) ) );
P-121578
NopeDotAvi
» 2014-11-27 21:30:07
też dobrym sposobem jest utworzenie funkcji:

C/C++
int dodajDoWektora( int x, int y )
{
    std::unique_ptr < Test > test( new Test( x, y ) );
    wektor.push_back( std::move( test ) );
}
P-121579
dek12
Temat założony przez niniejszego użytkownika
» 2014-11-27 23:21:02
Dziękuje, działa.
A jeszcze jedno pytanko. Jak teraz dodać do tego wektora obiekt który został utworzony w kodzie wcześniej?
Tak jak bym miał wcześniej
test a( 2, 20 );
i gdybym miał taki wektor:
std::vector < test > Test;
to po prostu push.back,
ale jak już teraz przerobiłem na:
std::vector < unique_ptr < test >> Test;
to jak teraz dodać te obiekt a?
P-121595
dek12
Temat założony przez niniejszego użytkownika
» 2014-11-28 21:28:45
poradzicie coś?
P-121658
Monika90
» 2014-11-28 21:39:10
kopię istniejącego oiektu a można dodać
C/C++
Test.push_back( std::make_unique < test >( a ) );

albo tak
C/C++
Test.push_back( std::unique_ptr < test >( new test( a ) ) );
P-121659
NopeDotAvi
» 2014-11-28 21:57:28
jeżeli ten wcześniej utworzony obiekt jest
unique_ptr
 (nie wiedziałem jak to lepiej opisać) to zrób tak:
wektor.push_back( std::move( a ) );
P-121661
dek12
Temat założony przez niniejszego użytkownika
» 2014-11-30 15:03:58
A gdy mam typ unique_ptr to muszę jeszcze jakoś ręcznie usuwać obiekt? Czy unique sam dba o czyszczenie śmieci?
P-121749
« 1 » 2
  Strona 1 z 2 Następna strona