__restrict__ shared_ptr и для любого класса в целом - PullRequest
0 голосов
/ 04 апреля 2019

Можно ли иметь __restrict__ квалификатор для std::shared_ptr?

Предположим, у меня есть класс, который оборачивает указатель.Есть ли механизм, позволяющий конечному пользователю добавить ограничивающий квалификатор в класс?Это должно быть эквивалентно присвоению ограничительного ограничителя для обернутого указателя.

1 Ответ

0 голосов
/ 04 апреля 2019

IIRC, нестандартное ключевое слово __restrict (и его варианты) применяется к необработанным указателям (или ссылкам в некоторых реализациях).Умные указатели являются обычными классами с точки зрения компилятора, поэтому вы не можете «ограничивать» их.

Однако, если вам нужно сообщить компилятору, что в некоторой части кода память указывает наИнтеллектуальный указатель доступен исключительно через один объект-указатель, вы можете извлечь ограниченный необработанный указатель из интеллектуального и использовать его вместо:

void f(std::shared_ptr<T>& ptr) {
  __restrict T* temp = ptr.get();
  // use temp here:
  ...
}
...