Cela peut ne pas être possible, mais j'ai pensé que je demanderais ...Suivi de la durée de vie variable automatique?
Y a-t-il un moyen de savoir si une variable automatique a été supprimée ou non sans modifier la classe de la variable elle-même? Par exemple, considérez ce code:
const char* pStringBuffer;
{
std::string sString("foo");
pStringBuffer = sString.c_str();
}
Il est évident que, après le bloc, pStringBuffer est un pointeur ballants qui peut ou peut ne pas être valide. Ce que je voudrais, c'est une façon d'avoir une classe wrapper qui contient pStringBuffer (avec un opérateur casting pour const char *), mais affirme que la variable référencée est toujours valide. En changeant le type de la variable référencée je peux certainement le faire (boost shared_ptr/weak_ptr, par exemple), mais j'aimerais pouvoir le faire sans imposer de restrictions sur le type référencé.
Quelques réflexions:
- je vais probablement besoin de changer la syntaxe d'affectation pour inclure la variable référencée (ce qui est bien)
- je pourrais être en mesure de regarder le pointeur de pile pour détecter si mon La classe wrapper a été allouée "plus tard" que la classe référencée, mais cela semble hacky et non standard (C++ ne définit pas le comportement de la pile). Cela pourrait fonctionner, cependant.
Pensées/solutions brillantes?
Oui; Purify ferait des choses similaires, à l'époque où il a réellement fonctionné et n'a pas seulement corrompu votre application à l'exécution. Malheureusement, il s'agit d'une application d'exécution, qui coûte de l'argent et qui ne fonctionne pas dans les applications d'une complexité commerciale. = / – Nick