C++ 延长C+中临时对象的使用寿命+;

C++ 延长C+中临时对象的使用寿命+;,c++,C++,我读到: 我理解第一个和第二个例子,但我不理解第三个例子。 特别是,什么是参考/参考,什么是“虚拟调度”。 如果您编写如下代码,那么这个示例将非常棒。: void g() { Base* b = new Derived; // calls Derived::Derived here // … use b … delete b; } 因为b的类型是Base*,如果基本析构函数是虚拟的,由于虚拟分派将调用派生析构函数,因为基本指针指向的对象的类型是派生的 相反,如果你使用 void g

我读到:

我理解第一个和第二个例子,但我不理解第三个例子。 特别是,什么是参考/参考,什么是“虚拟调度”。
如果您编写如下代码,那么这个示例将非常棒。

void g() {
  Base* b = new Derived; // calls Derived::Derived here
  // … use b …
  delete b;
}
因为b的类型是
Base*
,如果基本析构函数是虚拟的,由于
虚拟分派
将调用派生析构函数,因为基本指针指向的对象的类型是派生的

相反,如果你使用

void g() {
  Derived* d = new Derived; // calls Derived::Derived here
  // … use d …
  delete d;
}
无论基析构函数是否为虚拟析构函数,都会调用派生析构函数。不需要虚拟调度


作者想强调的是,在示例3中,即使如果基析构函数不是虚拟的,也会调用派生析构函数。因为没有调用析构函数,因为引用超出范围,但因为基引用不再需要临时对象(派生类型)。(必须是常量)

谷歌“C++虚拟调度”告诉你了什么?这篇文章没有包含“lreference”或“rreference”两个词,而是说“rvalue reference”。谷歌搜索这个告诉了你什么?你不理解哪些特殊的东西?看起来你在阅读GOTW之前有点太过了,讨论了一些好的技巧和先进的C++技术。我建议先吃点东西。你也可以考虑在线。@ JaunuDeC侮辱提问者不是一个有用的评论。(非常好!)问题的全部要点是OP正在阅读gotw试图学习。大多数的“普通教科书”都不会提到这一点神秘的(但仍然重要的)。你问的是关于C++中的基本术语的三个不同的问题。你应该先做些研究。
void g() {
  Derived* d = new Derived; // calls Derived::Derived here
  // … use d …
  delete d;
}