mer*_*011 4 c++ pointers auto c++11
请考虑以下示例,其中在取消引用基指针期间发生对象切片.
#include <stdio.h>
class Base {
public:
virtual void hello() {
printf("hello world from base\n");
}
};
class Derived : public Base{
public:
virtual void hello() {
printf("hello world from derived\n");
}
};
int main(){
Base * ptrToDerived = new Derived;
auto d = *ptrToDerived;
d.hello();
}
Run Code Online (Sandbox Code Playgroud)
我希望变量d保存类型的对象Derived而不是类型的对象Base,没有动态内存分配,也没有显式强制转换.
我已经看过这个问题了,但是答案中提出的解决方案需要动态内存分配,因为它返回一个指向新对象的指针,而不是新对象的值.
这在C++ 11中是否可行?
不,这是不可能的,因为如果d没有动态存储持续时间,那么它必须具有静态,线程或自动存储持续时间,并且在所有这些情况下,对象的类型在编译时是已知的.在您的情况下,您希望在运行时确定对象的类型,因为ptrToDerived可能指向Base对象或Derived对象或从其他类派生的对象Base.
如果您关注的是生命周期和内存泄漏,那么只需clone返回a std::unique_ptr<Base>而不是Base*.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |