Właściwe zniszczenie wskaźników do obiektów
Chciałbym zadać kilka szybkich pytań dotyczących właściwego niszczenia wskaźników int i wskaźników wektorowych. Po pierwsze, widziałem, jak ludzie pytali w przeszłości o tego typu problemy i prawie zawsze istnieje kilka odpowiedzi na pytanie, jak używanie wskaźników wektorowych, wskaźników do obiektów itp. W C ++ nie jest dobrą standardową praktyką kodowania c ++ i że należy utworzyć instancję kopia obiektu. To może być prawda, ale nie zawsze masz kontrolę nad paradygmatami, które zostały złożone przed przyjazdem. Paradygmat, w którym muszę pracować, wymaga inicjowania wskaźników do prawie wszystkiego. Bardzo podobne do Java podejście do C ++. Jednym z głównych powodów, dla których to robimy, jest to, że nasze zestawy danych są tak duże, że alokacja stosów może być przepełniona.
Moje pytania:
Jeśli mam wskaźnik do tablicy int32_t, jaki jest właściwy sposób na jej zniszczenie w destruktorze?
Uwaga: Naszą praktyką jest ustawienie dowolnego wskaźnika na NULL w konstruktorze.
I initialize it as a member variable.
int32_t *myArray_;
When I use it in a method, I would:
this->myArray = new int32_t[50];
To delete it in the method I would call delete on the array:
delete [] this->myArray;
What is the proper call in the destructor?
~MyDestructor(){
delete this->myArray_;
or delete [] this->myArray_;
}
Mam to samo pytanie dotyczące wskaźników wektorowych:
I initialize it as a member variable.
std::vector<MyObject*> *myVector_;
When I use it in a method, I would:
this->myVector_ = new std::vector<MyObject*>();
//pushback some objects
To delete the vector in the method I would iterate the vector and delete its objects, then delete the vector;
for(std::vector<MyObject*>::iterator itr = this->myVector_->begin();
its != this->myVector->end(); ++ itr){
delete (*itr);
}
delete this->myVector_;
What would be the proper way to clean it up in the destructor?
would I just delete the vector?
delete this->myVector;
or do I need to iterate the entire vector again?
Z góry dziękuję za wszelkie porady.