Le code ci-dessous entraîne une erreur d'exécution.
Chaque shared_ptr
détient la même mémoire, mais le compte pour chacun d'eux est toujours de un.
Ainsi, chaque pointeur partagé est différent, donc lorsqu'ils sortent du champ d'application, ils essaient de libérer le bloc et cela entraîne une corruption du tas. Ma question est la suivante : comment éviter cela ?
Je veux juste ajouter une déclaration comme celle-ci
shared_ptr<int> x(p);
est non négociable, je dois le déclarer.
#include <iostream>
#include <memory>
using namespace std;
int main ()
{
int* p = new int (10);
shared_ptr<int> a (p);
shared_ptr<int> b (p);
shared_ptr<int> c (p);
shared_ptr<int> d (p);
cout<<"Count : "<<a.use_count()<<endl;
cout<<"Count : "<<b.use_count()<<endl;
cout<<"Count : "<<c.use_count()<<endl;
cout<<"Count : "<<d.use_count()<<endl;
return 0;
}