Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除指向派生对象的基指针_C++_Memory Management_Casting_Polymorphism_Object Slicing - Fatal编程技术网

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);