当前位置: 首页 > 知识库问答 >
问题:

静态存储持续时间对象的破坏&未定义行为

翟弘
2023-03-14
#include <iostream>
#include <cstdlib>
class test
{
    public:
        test()
        {
            std::cout<<"constructor\n";
        }
        ~test()
        {
            std::cout<<"destructor\n";
        }
};
int main()
{
    test t;
    exit(0);
}

>

  • 自动对象t何时会被销毁?

    它会被编译器安全地销毁吗?

    为什么是未定义的行为?

    #include <iostream>
    #include <cstdlib>
    class test
    {
        public:
            test()
            {
                std::cout<<"constructor\n";
            }
            ~test()
            {
                std::cout<<"destructor\n";
            }
    };
    int main()
    {
        static test t;
        exit(0);
    }
    
  • 共有1个答案

    赵选
    2023-03-14
    1. 何时销毁自动对象t?

    从来没有。你引用的引文写着“...不破坏任何具有自动存储持续时间的对象...”

    不,编译器的工作是为机器生成运行的代码,一旦你进入运行时,编译器就不再做任何事情了。

     类似资料:
    • 帮我理解这个...参见粗体。从标准3.6.3终止(2) 如果一个函数包含一个静态或线程存储持续时间的块作用域对象,该对象已经被破坏,并且该函数在一个静态或线程存储持续时间的对象被破坏期间被调用,如果控制的信息通过了先前被破坏的blockscope对象的识别,则该程序具有未被修改的行为。同样,如果块作用域对象在销毁后被间接使用(即通过指针),则该行为将被忽略。 有人对此有明确的见解吗?

    • 我是Java和JavaFX的新手,过去几年我一直在用QT开发Python,现在我正在用Java和JavaFX开发。 我正在开发一个程序,为用户播放音乐文件设定时间,然后停止。因此,我需要从媒体对象获取持续时间,以便告诉音频何时停止(基于用户的时间输入),但是,媒体对象上的getDuration()方法总是返回UNKNOWN。 我在Windows 8.1和openSuSE 13.2上使用JDK8u2

    • 问题内容: 我是Java和JavaFX的新手,最近几年我一直在使用QT在Python上进行开发,现在我正在使用Java和JavaFX进行开发。 我正在开发一个程序,该程序可以为用户设置时间播放音乐文件,然后停止播放。因此,我需要从媒体对象获取持续时间以告诉音频何时停止(基于用户输入的时间),但是,媒体对象上的getDuration()方法始终返回UNKNOWN。 我在Windows 8.1和ope

    • 问题内容: 我需要计算用户在网站上花费的时间。登出时间与登出时间之间的区别是,给我类似“ X先生花了4个小时43分钟”。因此,为了存储the4小时43分钟,我这样声明: 时间NOT NULL 这是有效的还是更好的存储方式?我需要存储在数据库中,因为我还有其他计算需要将其用于+其他用例。 问题答案: 最好将其存储为整数秒数。 该会是干净和简单-即 正如Tristram所指出的,使用该字段存在局限性

    • 可能是一个有点傻的问题,但我只是一个初学者,有些事情我正在努力正确理解。 当我们有这样的代码时: 这里到底发生了什么?我们是否正在从getUserProfile对象中分解userName,以便能够访问该属性?userId是否意味着getUserProfile函数有一个参数,该参数是一个具有userId属性的对象? 对不起,如果这是一个太初学者的问题,但如果有人有时间向我解释,请真的很感激。

    • 我遇到了一个问题,我的MySQL表有一个存储UTC时间偏移的字段。该字段为时间类型。这是出于遗留原因,我无法将列类型更改为更好的表示形式。然而,MySQL支持这一点。它允许用户在时间字段中存储负值,以表示负时差。我使用querydsl生成实体类,并将该字段映射到java。sql。时间物体。现在,当DB中有负值时,我面临一个问题。爪哇。sql。Time类将任何负值转换为前一天的时间。例如,如果DB中