-1
Моя программа сбрасывается при попытке удалить созданные объекты. Думал, что было бы безопасно удалить объекты, созданные с помощью ключевого слова new
.Сбой при попытке удалить объекты
Почему это происходит?
Вот код:
Заголовок
#include <iostream>
#include <vector>
#include<string>
template<typename T>
class Postgre {
public:
Postgre();
std::vector<T*> get_user();
std::vector<T*> get_fake_user();
~Postgre();
};
class User {
public:
User(short id, std::string first_name, std::string last_name) {
this->ID = id;
this->first_name = first_name;
this->last_name = last_name;
}
short ID;
std::string first_name;
std::string last_name;
};
class Fake_User {
public:
Fake_User(short id, std::string user_name, std::string user_pw) {
this->ID = id;
this->user_name = user_name;
this->user_pw = user_pw;
}
short ID;
std::string user_name;
std::string user_pw;
};
источник
template<typename T>
Postgre<T>::Postgre() {
}
template<typename T>
Postgre<T>::~Postgre() {
}
template<typename T>
std::vector<T*> Postgre<T>::get_user() {
T* user = new T(1, "Peter", "Peters");
std::vector<T*> result;
result.push_back(user);
delete user;
return result;
}
template<typename T>
std::vector<T*> Postgre<T>::get_fake_user() {
T* fake_user = new T(2, "Beverly", "Peters");
std::vector<T*> result;
result.push_back(fake_user);
delete fake_user;
return result;
}
template class Postgre<User>;
template class Postgre<Fake_User>;
главный
int _tmain(int argc, _TCHAR* argv[]){
Postgre<User>* postgre = new Postgre<User>();
//test User Class:
std::vector<std::vector<User*>> list_user;
list_user.push_back(postgre->get_user());
std::cout << list_user[0][0]->ID << std::endl;
std::cout << list_user[0][0]->first_name << std::endl;
std::cout << list_user[0][0]->last_name << std::endl;
std::cout << std::endl;
//test Fake_User Class:
Postgre<Fake_User>* postgre2 = new Postgre<Fake_User>();
std::vector<std::vector<Fake_User*>> list_fake_user;
list_fake_user.push_back(postgre2->get_fake_user());
std::cout << list_fake_user[0][0]->ID << std::endl;
std::cout << list_fake_user[0][0]->user_name << std::endl;
std::cout << list_fake_user[0][0]->user_pw << std::endl;
//wait for keypress
std::cin.ignore();
return 0;
}
У вас есть оборванные указатели, хранящиеся в вашем векторе. –
'Думал, что это будет сохранить, чтобы удалить объекты, созданные с помощью ключевого слова 'new' 'Yes - но небезопасно использовать указатели на эти объекты ** после **, они были удалены таким образом. –
Непонятно, почему вы используете динамическое распределение в первую очередь. Что случилось с 'Postgre postgre;' или 'T fake_user (2,« Беверли »,« Питерс »);'? –