auto foo = ref new Foo(); 什么是"参考"?

Tim*_*dge 23 c++ windows-runtime c++-cx

我正在观看来自// build /的视频,并且有几位MS开发人员在他们的C++ 11程序中使用了这样的语法:

auto foo = ref new Foo();
Run Code Online (Sandbox Code Playgroud)

我理解除了"ref"之外,这一行中所做的一切.那是什么意思?

Ben*_*igt 10

即将推出的Visual C++编译器为处理WinRT对象添加了这种语法(后者又是下一代COM,我们现在经历了什么?COM,DCOM,COM +,ActiveX,...)

这条线几乎相当于:

com_ptr_t<Foo> foo = CreateInstance<Foo>();
Run Code Online (Sandbox Code Playgroud)

但是也有一个新版本com_ptr_t,使用语法Foo^.

  • @PavelMinaev:重载`operator&`不再违反STL约束.其次,用新东西编写的API*设计*只需要一个`com_ptr_t`.然而,Herb Sutter表示他们几乎只在C++中创建了库,但是有一些奇怪的边缘情况导致了作为库的非常糟糕的性能,他们不得不使用语言来解决它们.语法增强本身已经在C++/CLI的编译器中. (5认同)
  • @DeadMG:您是否碰巧链接到Herb Sutter的详细信息? (3认同)
  • @Ben我并不声称知道这个设计决定的具体原因,但是在ATL编写C++和COM代码几年后立即想到的一件事是,作为模板类实现的智能指针不能很好地与一个不使用它们的API - 你最终必须在API边界显式地包装/解包原始指针到智能指针.一个特别令人讨厌的情况是指针是一个out参数 - 所以你最终必须在包装它之前为它提供一个原始指针变量 - 否则就像ATL那样重载一元`&`并打破STL. (2认同)

Rei*_*man 8

"ref new"是2个令牌关键字.它指示编译器实例化Windows运行时对象并自动管理对象的生命周期(通过"^"运算符).

实例化Windows运行时对象会导致分配,但不必在堆上.