Kod folowing pokazuje wyjście nie oczekuje:Czy wektor STL wywołuje destruktor obiektu nieprzypisanego?
class test
{
public:
test()
{
std::cout << "Created" << (long)this << std::endl;
}
~test()
{
std::cout << "Destroyed" << (long)this << std::endl;
}
};
int main(int argc, char** argv)
{
std::vector<test> v;
test t;
v.push_back(t);
return EXIT_SUCCESS;
}
Po uruchomieniu pokazuje:
Created-1077942161
Destroyed-1077942161
Destroyed674242816
myślę drugi "Destroyed" wyjście nie powinno tam być. Kiedy nie używam wektora, wynikiem jest linia Jedna utworzona i jedna Zniszczona zgodnie z oczekiwaniami. Czy to zachowanie jest normalne?
(To jest skompilowany z GCC na systemie FreeBSD)
+1 dla [SSCCE] (http://sscce.org/) – Flexo
Aby wydrukować wskaźniki, najlepiej jest rzutować na wskaźnik pustych obiektów: 'std :: cout << (void *) this << std :: endl ; '. –
Również zwracanie 'EXIT_SUCCESS' jest opcjonalne. Możesz pominąć wartość zwracaną w 'main', zwróci ona' 0' (która zmieni się w którąkolwiek z liczb oznacza "normalne zakończenie" dla twojej platformy). –