Est-ce que les conteneurs de la STL fonctionnent comme un std::shared_ptr ?
Salut!
J'ai lu sur plusieurs articles que les contenaires de la STL sont des capsules RAII et qu'il est important de les utiliser en c++.
Si j'ai bien compris, en gros, ça signifie que si je fait ça :
Code:
1 2 3
|
std::vector<Objet*> list = {new Objet(), new Objet(), ...};
std::vector<Objet*> list2 = list; |
Les objects contenu dans les listes seront bien détruis lorsque les 2 listes (list et list2) seront détruites ?
Sinon que se passerais t'il si je fais ça ?
Code:
1 2 3 4 5 6 7
|
Objet* o1 = new Objet();
{
std::vector<Objet*> list = {o1, new Objet(), ...};
std::vector<Objet*> list2 = list;
}
//Utilisation de o1 -> crash ? |
Le std::vector agit t'il comme un delete ou bien faut t'il delete tout les éléments du std::vector manuellement ?
Bon j'ai eu ma réponse ici (ce code ne crash pas)
Code:
1 2 3 4 5 6 7 8
|
int main()
std::string* s = new std::string("Hello!");
{
std::vector<std::string*> list = {s, new std::string("world")};
}
std::cout<<*s<<std::endl;
return 0; |
Donc bon je ne comprend pas trop bien comment les contenaires de la STL delete les objets.