Se si desidera eseguire operazioni non-alias sull'oggetto sottostante associato con un puntatore condiviso si potrebbe esplicitamente delegare ad una routine di lavoro che prende un non-alias parametro pointer:
void worker (mytype *__restrict x, mytype *__restrict y)
{
// do something with x, y with a no-alias guarantee
}
int main()
{
std::shared_ptr<mytype> p(new mytype);
std::shared_ptr<mytype> q(new mytype);
// explicitly delegate the shared object
worker(p.get(), q.get());
return 0;
}
io non sono sicuramente quello che hai in mente, ma questo permetterebbe alla gestione della memoria di alto livello di essere gestita in sicurezza dal puntatore intelligente, mentre il lavoro a basso livello forse in modo più efficiente con puntatori no-alias.
Come @BenVoigt ha sottolineato, restrict
è solo ufficialmente parte di c99
- c++
non si suppone che ne sappia nulla. MSVC
lo supporta comunque tramite __restrict
e come hai detto GCC
ha __restrict__
.
Spero che questo aiuti.
fonte
2012-01-29 00:52:33
C++ non ha alcuna parola chiave 'restrict' o' __restrict__'. Se stai chiedendo informazioni sulle estensioni della lingua in un particolare compilatore, devi dire quale. –
@ BenVoigt scusa - chiarito in modifica. – James
Sembra improbabile che una soluzione che vuole lavorare su puntatori ristretti voglia rivendicare la proprietà condivisa del puntatore. Per non parlare del fatto che in un sistema con proprietà condivisa si finisce per sapere che i puntatori sono effettivamente distinti. In ogni caso, immagino che la tua funzione actualky voglia prendere dei puntatori [ristretti] piuttosto che 'std :: shared_ptr' s. –