在 C++ 继承中,当指向基类的指针对象指向派生类时,不会调用派生类析构函数

2023-12-24

我是新手,我知道这是一个非常基本的概念,也可能是重复的。 一旦调用了构造函数,就必须调用其相应的析构函数,这不是真的吗? [在 Dev C++ 上运行的代码]

class Base
    {
     public:
            Base() { cout<<"Base Constructor\n";}
            int b;
     ~Base() {cout << "Base Destructor\n"; }
    };

class Derived:public Base
{
 public:
        Derived() { cout<<"Derived Constructor\n";}
        int a;
 ~Derived() { cout<< "Derived Destructor\n"; }
}; 
int main () {
Base* b = new Derived;    
//Derived *b = new Derived;
 delete b;
    getch();
    return 0;
}

给出输出

Base Constructor
Derived Constructor
Base Destructor

您的代码有未定义的行为。基类的析构函数必须是virtual让以下内容具有定义的行为。

Base* b = new Derived;    
delete b;

来自 C++ 标准:

5.3.5 删除

3 在第一个替代方案(删除对象)中,如果静态类型 操作数与其动态类型不同,静态类型应是操作数动态类型的基类,并且静态类型应具有虚拟析构函数,否则行为未定义。

所以在你的情况下,静态类型是Base,动态类型为Derived。所以Base的析构函数应该是:

virtual ~Base() {cout << "Base Destructor\n"; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 继承中,当指向基类的指针对象指向派生类时,不会调用派生类析构函数 的相关文章

  • ASP Core HttpClientFactory 模式使用客户端证书

    任何人都知道在使用时如何使用客户端证书HttpClientFactory 在我发现的所有示例中 您需要提供HttpMessageHandler in the HttpClient构造函数 使用时不可用HttpClientFactory se
  • c# - 显示小数点到小数点后 6 位 [重复]

    这个问题在这里已经有答案了 可能的重复 具有 N 个小数位的 Double ToString https stackoverflow com questions 3059759 double tostring with n number o
  • 使用空函数调用 hana::is_valid 的用途是什么?

    Boost Hana https www boost org doc libs 1 61 0 libs hana doc html index html offers boost hana is valid https www boost
  • 为什么这个 oracle 批量插入不起作用?

    我正在尝试将一些数据批量插入到 oracle 数据库中 我按照文档中的示例进行操作 this DataBaseAccess new OracleConnection connString var dataAdapter new Oracle
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • 将 void *user_data 转换为对象

    我该如何投射void something到标准 C 中的对象 具体来说我想投void userdata to std map
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • boost::asio::io_service 是否保留处理程序的顺序?

    Does boost asio io service http www boost org doc libs release doc html boost asio reference io service html保证处理程序的调用顺序与
  • 为什么我不能从对中返回 unique_ptr?

    为什么我不能从对中返回 unique ptr include
  • 如何删除实体框架6中的多对多关系

    如果将项目连接为多对多关系 则从数据库中删除项目时会出现问题 我的数据库看起来像 Project lt JobInProject gt Job ProjectID JobInProjectID JobID ProjectID JobID 主
  • 如何在Azure功能中添加razor视图文件?

    我正在创建一个应用程序 它是 azure 函数项目 我想在该项目中使用 Razor 视图 我应该在 azure 函数中使用任何模板引擎吗 得益于一些方面的进步剃刀之光项目 https github com toddams RazorLigh
  • 为什么这个单独的定义会导致错误?

    挑战 我有这段代码无法编译 你能找出问题所在吗 有一次让我很头疼 header namespace values extern std string address extern int port cpp file std string v
  • 将授权标头添加到 Web 参考

    我正在尝试向客户端的网络服务发出请求 我不知道客户端的底层平台 我使用 添加 Web 引用 在 Visual Studio 2010 中使用了客户端的 WSDL 并生成了我的代理类 称为 ContactService 我现在需要将如下所示的
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • 生成范围 [min,max] 内的随机数 [重复]

    这个问题在这里已经有答案了 我正在使用 C 生成范围 min max 内的整数随机数 我在用 int random int int min int max return min rand max min 但我认为上面的代码适用于范围 min
  • 使用 _Alignas 进行结构成员对齐

    我想知道以下问题 是新的吗 Alignas结盟 C11 中的说明符适用于结构成员吗 我一直假设这么多 但彻底阅读了 N1570 公开草案似乎表明对齐说明符不能 出现在一个说明符限定符列表 这就是我所期望的 如果得到支持的话 我已经读过几遍语
  • 如何在asp.net core 6中注入IConfiguration

    web api 应用程序中不再有 Startup cs 我们以前可以注入IConfiguration进入那个Startup class public class Startup public Startup IConfiguration c
  • C++ 联合数组和变量?

    在C 中没有办法做这样的事情吗 union Scalar x y Scalar v 2 Where x v 0 and y v 1 既然您使用的是 C 而不是 C 并且它们具有相同的类型 为什么不直接将 x 设为对 v 0 的引用 将 y
  • 如何创建和使用类箭头运算符? [复制]

    这个问题在这里已经有答案了 因此 在到处研究之后 我似乎找不到如何创建类箭头运算符 即 class Someclass operator gt 我只需要知道如何使用它并正确使用它 它的输入是什么 它返回什么 我如何正确地声明 原型化它 运算
  • 替换全局热键

    我有一个位于托盘中的应用程序 我想定义多个热键来触发我的程序中的事件 我从 AaronLS 在这个问题中的出色回答中找到了灵感 使用C 设置全局热键 https stackoverflow com a 27309185 3064934 如果

随机推荐

  • 浮动嵌套div的填充高度

    我正在制作一个基本的评论系统 当评论很短时它是完美的 但是当用户写很多时 评论并不像应有的那么花哨 我尝试用高度 100 但它并没有像我预期的那样工作 我希望作者信息填写评论的高度 到目前为止我尝试过的 http jsfiddle net
  • 从新的 youtu.be 网址获取视频 ID

    我有以下代码 可以从旧的共享网址中获取 youtube 的视频 id youtube com watch v adasdalkjsd url GET url parse str parse url url PHP URL QUERY que
  • Glassfish 线程池、接受器线程、HTTP 最大连接数

    请参阅附图 请帮助我理解线程池 最大和最小线程池大小 接受器线程及其最大连接数和 HTTP 最大连接数之间的关系 线程池 HTTP 传输TCP 首先我给你一些官方文档 线程池 线程池是服务器可以处理的并发请求的最大数量 服务器有一个连接队列
  • 使用 EF 和 WebApi 序列化父/子对象

    我在实体框架内有以下模型 public class Customer XmlIgnore public virtual ICollection
  • 刷新/重新启动 PowerShell 会话而不退出

    我一直在调整我的 PowerShell 配置文件中的一些脚本 退出 powershell 然后重新启动它很烦人 这样它就会加载我对我的配置文件中的脚本所做的任何更改 是否可以在不退出的情况下重新启动 powershell 会话 你可以这样做
  • Rails 4 参数数量错误(2 为 1)。可能是 Strong_params 问题

    我将 Rails 4 与 Devise Cancan 和 Rollify 一起使用 我有一个用户索引 其中包含更改角色的模式 但是 当我尝试更新角色时 出现以下错误 参数数量错误 2 为 1 错误发生在我的用户控制器代码的第 16 行 13
  • Oracle 11g 通过正则表达式获取所有匹配的出现

    我正在使用 Oracle 11g 我想使用 REGEXP SUBSTR 来匹配给定模式的所有出现情况 例如 SELECT REGEXP SUBSTR Txa233141b Ta233141 Ta233142 Ta233147 Ta23314
  • Animate.css动画完成后动画消失

    我正在尝试构建一个菜单 每个列表项都有一系列动画 它有效 但动画结束后该项目再次消失 看起来 animated 的可见属性没有被使用 您可以给我任何指示来解决这个问题吗 ul class menu ani item li class ani
  • E:存储库“http://archive.ubuntu.com/ubuntu precision Release”未签名

    我正在尝试通过运行此命令在本地设置 Scrapy docker env docker build t scrapy 我遇到以下错误 Get 20 http archive ubuntu com ubuntu http archive ubu
  • Chrome CustomTabs CustomTabsCallback onPostMessage 未调用

    我正在尝试在 Android 上使用 Chrome CustomTabs 但在使用 CustomTabsCallback 时遇到问题 因此 我在网上搜索了一些在我的代码中实现的示例或文档 但不幸的是我没有找到任何东西 我需要接收托管网页发送
  • Java 中的事件监听器和处理程序有什么区别?

    一般来说 java 中有事件的侦听器和处理程序 我的意思是我在不知不觉中使用它们 只是 API 中可用的 我的问题是 在什么情况下我们使用侦听器以及在什么情况下使用事件处理程序 他们之间有什么区别 特征 我搜索了原因 但找不到 Java 的
  • ConEmu 与 Git Bash - 在选项卡栏中显示文件夹

    我通常在 ConEmu 选项卡中运行 Git Bash 在每个 Git Bash 实例的选项卡栏中显示当前目录的名称确实很方便 但如果我将选项卡模板设置为 d or f 无论我在哪里 我总是可以获得我的 Windows 主目录cd到 Git
  • Apple OS X Server(Xcode CI 服务)找不到配置文件

    我配置了带有 OS X Server 的专用 Mac mini 以便与 XCode5 持续集成 添加了 git 存储库并创建了机器人 我正在尝试集成机器人并收到错误 Specified PROVISIONING PROFILE 29DAD4
  • 如何禁用 Hadoop Kerberos

    我使用内部脚本来设置 Hadoop 集群 默认情况下 它使用 Kerberos 配置 Hadoop 安全性 这对于开发环境来说是非常不方便的 我用谷歌搜索了很多 但结果都是关于 如何启用 请帮忙给一些参考或者建议 更改以下值 core si
  • 将供应商 Android 更改集成到 aosp 中

    我正在尝试将 AOSP 设备更改集成到标准 AOSP 本地镜像中 这有点令人困惑 但我会尽力尽可能清楚 我在服务器 不同的本地计算机 上创建了 AOSP 存储库的本地镜像 供应商补丁基于标签 android 4 3 r2 1 所以我初始化了
  • 如何在 DataFrame 中跨组使用 QuantileDiscretizer?

    我有一个包含以下列的数据框 scala gt show times printSchema root account string nullable true channel string nullable true show name s
  • 创建用自定义令牌交换 .Net Auth Cookie 的 Owin Auth 提供程序

    我正在尝试在 2 个 Net 应用程序之间创建类似 SSO 的解决方案 Net 应用程序 1 有一个自定义令牌生成器和端点来验证返回用户信息的令牌 Net 应用程序 2 使用 Owin 进行保护 是一个典型的独立应用程序 用户可以使用密码和
  • JMS - 消息选择器如何与多个队列和主题消费者一起工作?

    假设您有一个 JMS 队列 并且多个使用者正在监视队列中的消息 您希望其中一个消费者获得所有特定类型的消息 因此您决定采用消息选择器 http java sun com j2ee sdk 1 3 techdocs api javax jms
  • has_many :通过+多态关系

    我使用rails3并尝试建立一些复杂的关联 我有产品 版本和属性模型 class Version lt ActiveRecord Base belongs to product has many specs has many propert
  • 在 C++ 继承中,当指向基类的指针对象指向派生类时,不会调用派生类析构函数

    我是新手 我知道这是一个非常基本的概念 也可能是重复的 一旦调用了构造函数 就必须调用其相应的析构函数 这不是真的吗 在 Dev C 上运行的代码 class Base public Base cout lt lt Base Constru