Я смотрел видео из //build/, и несколько разработчиков MS использовали подобный синтаксис в своих программах на C++11:
auto foo = ref new Foo();
Я понимаю, что делает в этой строке все, кроме "ref". Что это значит?
Я смотрел видео из //build/, и несколько разработчиков MS использовали подобный синтаксис в своих программах на C++11:
auto foo = ref new Foo();
Я понимаю, что делает в этой строке все, кроме "ref". Что это значит?
Готовящийся к выпуску компилятор Visual C++ добавляет этот синтаксис для работы с объектами WinRT (которые, в свою очередь, являются следующим поколением COM, через что мы уже прошли? COM, DCOM, COM+, ActiveX, ...)
Эта строка почти эквивалентна:
com_ptr_t<Foo> foo = CreateInstance<Foo>();
Но есть и новая версия com_ptr_t
, использующая синтаксис Foo^
.
new
и delete
.
- person Ben Voigt; 23.09.2011
boost::shared_ptr
. com_ptr_t
уже сделал это. Почему они ввели специальный синтаксис для чего-то, встроенного в C++, я не знаю.
- person Ben Voigt; 23.09.2011
AddRef
/ Release
.
- person Pavel Minaev; 24.09.2011
&
, как это делает ATL, и сломать STL.
- person Pavel Minaev; 24.09.2011
operator&
больше не является нарушением ограничений STL. Во-вторых, API-интерфейсы, разработанные для написания новых материалов, могут просто взять com_ptr_t
. Тем не менее, Херб Саттер сказал, что они почти сделали это только библиотекой на C++, но были некоторые странные пограничные случаи, которые приводили к очень плохой производительности в качестве библиотеки, и им пришлось сделать это языком, чтобы решить их. Сами усовершенствования синтаксиса уже были в компиляторе для C++/CLI.
- person Puppy; 24.09.2011
com_ptr_t
, но переносимый ABI не может, если только вам не требуется очень конкретное представление для интеллектуального указателя (поэтому, например, вы не можете использовать ATL CComPtr<T>
в сигнатурах методов при написании COM-компонентов сегодня и должны принимать/возвращать необработанные указатели). Конечно, VC++ уже размещает виртуальные таблицы очень специфическим образом для COM...
- person Pavel Minaev; 26.09.2011
«ref new» — это ключевое слово с двумя токенами. Он указывает компилятору создать экземпляр объекта среды выполнения Windows и автоматически управлять временем жизни объекта (через оператор «^»).
Создание экземпляра объекта среды выполнения Windows вызывает выделение, но он не обязательно должен находиться в куче.
ref в данном случае означает подсчет ссылок. Классы, использующие ref, являются компонентами WinRT, в которых есть готовые механизмы подсчета ссылок.