Ho sviluppato l'abitudine di usare costrutti C ++ sicuri, laddove possibile, ma c'è un posto in cui non sono sempre sicuro se sia meglio usare riferimenti o ricorrere a buoni puntatori.
Codice di esempio:
int FillFancyPointer(char *&ptr)
{
ptr = NULL;
char *tmp_ptr = static_cast<char*>(calloc(...));
if(!ptr)
return -1;
ptr = tmp_ptr;
return 0;
}
Codice successivo:
char *ptr = nullptr;
if(FillFancyPointer(ptr)>=0 && ptr)
Nice();
Il problema con questo, IMHO, è che il ptr sembra essere di sola lettura variabile quando si guarda il codice, mentre in realtà è modificato.
L'approccio COM ISmthn *ptr;
, CoCreate(..., &ptr)
sembra più pronunciato. Ma è anche più incline agli errori, dato che c'è questa roba **
ovunque.
A pensarci bene, anche le variabili di output come std::string
saranno mascherate con tale approccio.
int Foo(const string &in, string &inout)
Trovate riferimenti confusi in tali luoghi?