C++ 删除指向派生对象的基指针
这会起作用吗,还是会有切片(即,只释放与基本对象占用的内存相对应的内存,而不是整个派生对象的内存): 若否,会否这样做C++ 删除指向派生对象的基指针,c++,memory-management,casting,polymorphism,object-slicing,C++,Memory Management,Casting,Polymorphism,Object Slicing,这会起作用吗,还是会有切片(即,只释放与基本对象占用的内存相对应的内存,而不是整个派生对象的内存): 若否,会否这样做 delete static_cast<Derived*>(ptr); 删除静态广播(ptr); 这将起作用 通过基对象指针调用派生对象的方法是多态性的基本原理之一 但是,请确保基类析构函数是虚拟的,以便正确地析构函数对象。这不是对象切片。当您将派生对象强制转换为基础对象时,会发生对象切片。这里您正在操作指针。您可以始终将基类析构函数设置为虚拟,以确保按与创建相反的
delete static_cast<Derived*>(ptr);
删除静态广播(ptr);
这将起作用
通过基对象指针调用派生对象的方法是多态性的基本原理之一
但是,请确保基类析构函数是虚拟的,以便正确地析构函数对象。这不是对象切片。当您将派生对象强制转换为基础对象时,会发生对象切片。这里您正在操作指针。您可以始终将基类析构函数设置为虚拟,以确保按与创建相反的顺序删除对象如果
base
的析构函数为virtual
,则一切都会正常。如果不是这样,编译器很可能会警告您。是的,是这样。我只是有点累,我想:)谢谢。
delete static_cast<Derived*>(ptr);