Si desea realizar operaciones no-alias en el objeto subyacente asociada con un puntero compartida que podría delegar de forma explícita a una rutina trabajador que toma un parámetro de puntero no-alias:
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;
}
No estoy Asegúrese exactamente de lo que tiene en mente, pero esto permitiría que la gestión de memoria de alto nivel sea tratada de manera segura por el puntero inteligente, mientras que hace el trabajo de bajo nivel posiblemente de manera más eficiente con punteros sin alias.
Como @BenVoigt señaló, restrict
es solo oficialmente parte de c99
- c++
se supone que no debe saber nada al respecto. MSVC
lo admite de todos modos a través de __restrict
y como ha dicho GCC
tiene __restrict__
.
Espero que esto ayude.
C++ no tiene ninguna palabra clave 'restrict' o' __restrict__'. Si pregunta por las extensiones de idioma en un compilador en particular, debe indicar cuál. –
@BenVoigt lo siento - aclarado en la edición. – James
Parece poco probable que un elemento que desee trabajar con punteros restringidos desee reclamar la propiedad compartida del puntero. Sin mencionar que en un sistema con propiedad compartida terminas sabiendo que los indicadores son realmente distintos. En cualquier caso, supongo que su función realky quiere tomar punteros [restringidos] en lugar de 'std :: shared_ptr' s. –