gpt4 book ai didi

c++ - 是否可以在构造函数之前调用 C++ 对象实例的析构函数?如果是这样,如何?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:15 24 4
gpt4 key购买 nike

是否可以在构造函数之前调用 C++ 对象实例的析构函数?

并不是说我真的想这样做,但我想知道它是否确实是编译器错误的指示,或者某些错误的 C++ 代码是否有办法导致这种明显不正确的行为(即使这是一个人为的例子)。

当我注意到在时间记录构造函数/析构函数对中测量时间的模式时,我开始想知道这个问题,并且代码包含隐式假设:析构函数时间 >= 构造函数时间。

大概这个假设总是正确的,给定相同的时钟......如果违反,我会在怀疑编译器错误之前怀疑时钟“问题”。

那么……有可能吗?如果是这样,怎么做到的?

最佳答案

是的,你当然可以做到。只有UB。
最简单的方法是在一个你明确管理其生命周期的值上调用 dtor:

union{std::vector<int> v;}; // This disables automatic dtor/ctor calls. Needs C++11
v.~vector<int>();

仅当 ctor 和/或 dtor 是微不足道的(又名什么都不做)时,在对象的 ctor 之前调用 dtor 才是安全的。
也称为,对象始终被初始化。

我实际上不知道有什么理由调用 dtor 但从来没有/在 ctor 之前。
尽管可以考虑您想避免调用其中任何一个的情况。

无论如何,您可能希望确保使用单调时钟源,例如本地时间(或系统时钟)有时会向后调整(DST,时钟偏差)。

关于c++ - 是否可以在构造函数之前调用 C++ 对象实例的析构函数?如果是这样,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com