我知道的
我知道返回临时对象的 const 引用是可以的!(像这个例子:)
class A {
public:
virtual const A& clone () { return (A()); }
virtual std::string name() const { return ("A"); }
};
但!
如果我想这样做,它仍然是正确的:
class B : public A {
public:
virtual const A& clone () { return (B()); }
virtual std::string name() const { return ("B"); }
};
我认为是的,但在执行时,返回的对象仍被视为 A 对象(如本例中所示:)
主文件
#include <iostream>
#include <string>
int main() {
B bb;
A* aa = &bb;
std::cout << aa->clone().name() << std::endl;
}
输出
valgrind ./a.out
==14106== Use of uninitialised value of size 8
==14106== at 0x401BF9: main (main.cpp:8)
==14106== Uninitialised value was created by a stack allocation
==14106== at 0x401BF2: main (main.cpp:8)
B
这是一个 B.. 是的.. 但是这个警告是相当可怕的....
编辑
谢谢你,我知道我的错误......但我想知道其他一些事情......
执行此操作时,堆栈中到底发生了什么?