c++ - Visual Studio:用户定义的构造函数更改对象生命周期
问题描述
考虑以下示例:
#include <iostream>
struct A
{
~A() {std::cout << "~A()\n";}
};
struct B
{
B() {std::cout << "B()\n";}
~B() {std::cout << "~B()\n";}
};
template< typename T>
struct cref
{
const T &t;
};
int main()
{
cref<A> a{{}};
std::cout << "---\n";
cref<B> b{{}};
std::cout << "---\n";
}
在 Visual Studio 2019 16.10.3 中打印
~A()
---
B()
---
~B()
这意味着对象A
在构造它的同一行中被破坏,并且对象的B
生命周期被延长到main
函数范围的末尾。
A
类和类之间的唯一区别B
是在B
. 它真的可以根据标准改变对象的生命周期还是只是一个编译器错误?
解决方案
推荐阅读
- python - 是否支持序数后缀本地化?
- google-app-engine - gcloud app部署错误.cache下的文件过多
- jenkins - 在 groovy 管道中找不到不可序列化的组件
- angular - 如何从 Mat 表单字段计算数学方程,该字段使用 Angular 材料像等号的 excel 一样公式化
- java - 将文本插入 word 而不转换为段落
- azure-active-directory - 注册和租户入职 - 如何仅在受邀申请时才允许
- json - 将 JSON 文件解析为 csv
- ejabberd - 如何从 ejabberd 数据包中提取数据?
- c - C: strcat() 终止程序没有错误
- python - 是否有读取 ms office 文件的底层 xml 的 python 包?