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

Wskaźnik jako dana składowa klasy, problem z użyciem obiektu tej klasy w innej funkcji.

Ostatnio zmodyfikowano 2013-08-12 14:20
Autor Wiadomość
rwfx1911
Temat założony przez niniejszego użytkownika
Wskaźnik jako dana składowa klasy, problem z użyciem obiektu tej klasy w innej funkcji.
» 2013-08-11 13:34:29
Mam sobie klase która zawiera wskaźnik, tworze obiekt w jednej funkcji, dodaje do wektora i gdy próbuje ten obiekt użyć w drugiej funkcji(biorąc go z wektora) wiadomo, że jest krasz bo wskaźnik pokazuje źle.

W pewnej książce wyczytałem, że może pomóc mi konstruktor kopiujący(nie wchodze w inne szczegóły C++11, boost) bo chce to zrobić po staremu. Problem w tym, że konstruktor kopiujący tworzy drugi taki sam obiekt więc co mi po tym skoro ten obiekt tak samo jak ten pierwszy nie będzie istniał.

Jak mogę to naprawić?

C/C++
//skrawek kodu

//Pseudo-klasa
class CTest
{
    TiXmlElement * m_pRoot;
public:
    CTest( void ); // Jakies tam wstepne operacje na m_pRoot
    void JakasFunkcja( void ); // tu tez cos z m_pRoot
};

std::vector < CTest > pojemnik;

int FuncA( void )
{
    CTest nowy();
    pojemnik.push_back( nowy );
    return 1; // tu jest problem, bo nowy juz nie istnieje, a wskaznik z wektora pokazuje zle..
}

int FuncB( void )
{
    CTest istniejacy = pojemnik.at( 0 );
    istniejacy.JakasFunkcja(); // crash, bo funkcja operuje na wskazniku ktory pokazuje nie na to co trzeba..
    return 1;
}
P-89981
MordiJC
» 2013-08-11 23:07:07
C/C++
class CTest
{
    TiXmlElement * m_pRoot;
public:
    CTest() { }
    CTest( CTest & c ) { }
    void JakasFunkcja() { }
};

std::vector < CTest * > pojemnik;

int FuncA()
{
    CTest * nowy = new CTest;
    pojemnik.push_back( nowy );
    return 1;
}

int FuncB()
{
    CTest * istniejacy = pojemnik.at( 0 );
    istniejacy->JakasFunkcja();
    return 1;
}

Jeżeli chcesz się pozbyć tego objektu, to użyj:
C/C++
delete istniejacy;
istniejacy = 0;
delete pojemnik.at( 0 );
pojemnik.at( 0 ) = 0;
P-90052
rwfx1911
Temat założony przez niniejszego użytkownika
» 2013-08-12 14:20:12
nie pomyslalem o dynamicznej alokacji, dzieki! teraz chodzi.
P-90086
« 1 »
  Strona 1 z 1