Visual C++ 似乎对类的 POD 成员进行了零初始化,但它不应该这样做

2024-02-17

我有一堂这样的课:

class TestClass
{
public:
    TestClass() {};
    //Note: I wish not to initialize rawMemory (for whatever reason)
    int rawMemory[32];
};

int main()
{
    TestClass obj;
    return 0;
}

在我创建了一个TestClass对象使用TestClass obj;我得到了我想要的行为:rawMemory 未初始化(在调试模式下填充 0xcc,在发布模式下填充随机未确定值)。
然而,当我向类添加指针成员时:

class TestClass
{
public:
    TestClass() {};
    int rawMemory[32];
    int* ptr;
};

The rawMemory被初始化为零!我认为按照标准,这种情况不应该发生。我什至尝试过std::aligned_storage专门用于保留未初始化的自动内存,以及rawMemory仍然被零初始化!

class TestClass
{
public:
    TestClass() {};
    std::aligned_storage<sizeof(int), alignof(int)>::type rawMemory[32];
    int* ptr;
};

注意:我尝试过 g++,它按我的预期工作。
更新:如果我将 TestClass 更改为结构,问题就消失了;如果我给TestClass默认的隐式构造函数问题就消失了。


我终于找到了这个问题的根源。
当类中存在指针成员时,Visual C++ 会插入一个autoclassinit在调用我定义的构造函数之前调用方法。这个方法调用有点搞乱了成员初始化,并且它对我的进行了零初始化rawMemory member.
可以通过禁用来删除此行为/sdl在 Visual C++ 编译器选项中。但是,如果它不是非常关键的性能(或瓶颈),我的建议是保持原样。
感谢所有试图提供帮助的人!

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

Visual C++ 似乎对类的 POD 成员进行了零初始化,但它不应该这样做 的相关文章

  • 使用和重载基类的模板成员函数?

    下面 构造Y超载X的成员函数f 两个重载都是模板函数 但采用不同的参数 typename and int 明确指定 struct X template
  • 在 Windows 应用商店应用程序 (Win 8.1) 中使用 MIDI

    我的目标是在 Windows 应用商店应用程序中接收 MIDI 消息 微软提供了一个名为Microsoft WindowsPreview MidiRT 作为 nuget 包 我设法获得了 MIDI 端口 但是MessageReceived尽
  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每
  • 在 C 中使用相等运算符 == 比较两个字符串是否相等 [重复]

    这个问题在这里已经有答案了 int main int argc argv if argv 1 hello printf True n else printf False n myProg hello False 为什么 我意识到strcmp
  • 如何向 Iron Python 添加模块?

    我一直在尝试使用 C Visual Studio 执行以下 Python 代码 graphcreater py 我通过 NuGet 包管理器添加了 IronPyton 2 7 7 和 IronPython StdLib 2 7 7 一旦我运
  • 创建一个从用户机密获取连接字符串的 DbContextFactory

    使用 DotNetCore 解决方案WebApi项目和一个单独的Data包含实体框架实现的项目 我们一直在升级库 因此我们使用所有最新的核心内容 In the Data项目 我们创建了一个ApplicationDbContextFactor
  • C# 中的 memcpy 函数 [重复]

    这个问题在这里已经有答案了 可能的重复 C memcpy 等效项 https stackoverflow com questions 510971 c memcpy equivalent 相当于什么memcpyC 中的函数 正如已经说过的
  • 如何将值从 ASP.NET MVC 控制器传递到 MVC 视图内的 ASP.NET Webforms 控件?

    我的 ASP NET MVC 方法并未跨越 ASP NET Web 窗体 因此我很难理解如何更好地将值从 ASP NET MVC 控制器传递到 MVC 视图内的 ASP NET Webforms 脚本 例如 控制器动作 public Vie
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • iText7 RegexBasedLocationExtractionStrategy 如何获取找到的文本的字体名和字体大小

    我尝试在 C 上使用 iText7 进行文本替换 我只能使用 RegexBasedLocationExtractionStrategy 获取搜索文本的内容和矩形 并且我想获取文本的字体和大小 有什么建议么 谢谢 你可以实施IText提取策略
  • NHibernate 继承 - 判别器值

    NHibernate 是否可以有一个像这样工作的判别器 如果值等于 String Empty gt Class1 其他 gt Class2 我已经有一个 CultureName 字符串列 我想将其用作鉴别器 我不想添加额外的布尔列 如果 C
  • 在 Silverlight 中调用 WCF 服务时使用 Observable.FromEvent

    我正在尝试使用 NET Reactive Framework 来简化对我正在编写的 Silverlight 3 应用程序使用的 WCF 服务的一些异步调用 问题是我很难找到一种有效的方式来构建我的代码 毫无疑问 部分问题是了解 Reacti
  • 对双向链表进行排序 C++

    尝试通过遍历列表的循环来完成此操作 在循环中 我将头节点输入到我定义的排序函数中 然后使用 strcmp 来确定节点中的哪个名称是否应该排在前面 它不起作用 因为写得太早了 我通过一次沿着列表一个节点进行线性比较 而不是回去查看第一个节点是
  • Doxygen 支持 C++11 模板别名(“using”语法)吗?

    我正在使用 doxygen 1 7 1 为一些 C 11 代码生成文档 它似乎忽略了我的模板别名 为了清楚起见 下面是模板别名的示例 template
  • 在 QML 中使用 C++ 枚举作为字符串

    我想做的是在 C 中使用以下枚举 class MyClass public QQuickItem Q OBJECT Q PROPERTY MyEnum enumValue READ getEnumValue public enum MyEn
  • 当调试器退出且没有调用堆栈时,用于跟踪 C# 崩溃的工具?

    我有一个大型 复杂的 C GUI 应用程序 它以完全可重现的方式崩溃 但我无法轻松诊断崩溃的原因 因为调试会话不是以通常的方式使用调用堆栈破坏调试器 而是完全退出 唯一的提示是输出窗口末尾有一条消息 STATUS STACK BUFFER
  • 如何在C++中动态调用函数

    除了 boost Bind Function 之外 我如何在 C 中动态调用函数 PHP has obj new MyObject function doSomething obj gt function Objective C 有 MyO
  • .NET Compact Framework 上的 DateTime.Now 中的毫秒始终为零?

    我想要一个时间戳对于日志Windows 移动项目 精度必须至少在一百毫秒范围内 然而我打电话给DateTime Now返回一个DateTime对象与Millisecond属性设置为零 还有Ticks属性相应地进行四舍五入 如何获得更好的时间
  • C# 固定长度的字符串对象

    我有一堂课 我想使用固定大小的字符串 固定大小的原因是该类 序列化 为文本文件 具有固定长度的值 我想避免为每个值编写一个保护子句 而是让类处理它 所以我有大约 30 个属性 看起来像这样 public String CompanyNumb
  • 在 Angular 6 和 ASP.net 中启用 CORS

    我正在尝试从 Angular 6 应用程序向发送电子邮件的 API 发送 POST 请求 我用邮递员测试了该请求并且它有效 但是当我在 Angular 应用程序中执行 POST 请求时 我的控制台中出现错误 我在 Angular 应用程序中

随机推荐

  • 将 strstream 转换为 sstream 关​​于 c_str() 的冲突

    我有这样的代码块strstream 我把它转换为sstream如下 我不确定 但我认为printStream gt str 返回一个字符串对象 其中包含由指向的流缓冲区中的内容的副本 临时 printStream 然后你调用c str 并得
  • 阻止 Visual Studio 自动更改 IIS 虚拟目录的物理路径?

    我有一个 Visual Studio 解决方案 其中包含一个 Web 应用程序项目 以及其他一些项目 Visual Studio 典型 设置似乎坚持认为二进制文件的输出目录位于项目源目录的根目录中 特别是 每次打开Web应用程序项目时 Vi
  • iOS 10.1 启动应用程序时出现警告

    为什么应用程序收到此警报以及如何解决此问题 AppName 可能会减慢您的 iPhone 该应用程序的开发人员需要更新它以提高其兼容性 我已经浏览过这个链接 iOS 10 1 模拟器显示 应用程序可能会减慢您的 iPhone 速度 http
  • 获取使用 calc 等表达式的 CSS 变量的计算值

    在 JavaScript 中 您可以使用以下命令获取 CSS 变量的值getPropertyValue property https developer mozilla org en US docs Web API CSSStyleDecl
  • Sinatra/Rack 的一个非常简单的身份验证方案是什么

    我正忙于将一个非常小的 Web 应用程序从 ASP NET MVC 2 移植到 Ruby Sinatra 在 MVC 应用程序中 当根据数据库正确验证用户登录时 FormsAuthentication SetAuthCookie 用于设置持
  • 如何使用接口实现松耦合?

    我似乎不明白接口如何实现松耦合的概念 您可能会发现这个问题与其他问题重复 但我已经阅读了许多与该主题相关的答案 但没有找到令人满意的解释 下面是许多开发人员实现松散耦合的示例 interface shape public function
  • 如何禁用 Django allauth 中的中间注销页面

    How to disable the intermediate signout page from django allauth When the user clicks on the signout link on my site I w
  • 使用“copy”属性来维护不可变的 NSString

    我对 iOS 开发和 Objective C 编程非常陌生 我一直在应用程序开发库上做练习 这是我正在尝试理解的当前练习 3 测试如果您将可变字符串设置为该人的名字 然后在调用修改后的 sayHello 方法之前更改该字符串 会发生什么情况
  • SwiftUI 中联系人应用程序中的联系人列表

    您好 我正在尝试构建一个列出所有联系人的界面 就像Contacts and Phone应用程序具有相同的UI 到目前为止我所尝试的如下 基本上我尝试实施CNContactPickerViewController from ContactsU
  • 如何向 THREE.BufferGeometry 添加面?

    我以编程方式创建了一个简单的网格 var CreateSimpleMesh new function var xy maxX 7 maxY 10 river 0 5 0 4 1 3 2 2 3 2 4 1 5 1 6 0 grassGeom
  • 如何将当前git分支的名称放入shell脚本中的变量中? [复制]

    这个问题在这里已经有答案了 我是 shell 脚本新手 无法弄清楚这一点 如果您不熟悉 命令 gitbranch 返回类似的内容 develop master 其中星号标记当前签出的分支 当我在终端中运行以下命令时 git branch g
  • JavaFX 树视图不显示任何项目

    我尝试在我的 JavaFX 应用程序中实现 TreeView 但不幸的是没有显示任何项目 但我找不到问题 我搜索了一些例子并像他们一样做了 我将 TreeView 控件放入 SceneBuilder 中的 FXML 文件中 并选择生成的 C
  • Java:将(长)对象转换为双精度的多种方法

    我有一个Object obj我知道实际上是一个long 在一些数学代码中我需要它作为double 直接将其转换为双倍安全吗 double x double obj 或者我应该先将其转换为 long 然后再转换为 double double
  • 具有多行的 NSTextFieldCell

    我需要显示一个包含多行且每行格式不同的 NSTextFieldCell 像这样的事情 Line 1 Title2号线 描述 我对 NSTextFieldCell 进行了子类化 但我不知道如何继续使用它 有任何想法吗 首先 你不have子类化
  • 将连接限制为一行

    我有以下查询 SELECT sum select count as itemCount SalesOrderItems price as amount rma as creditType Clients company as client
  • C在short和int之间转换的规则是什么?

    当使用 C 在 Short 和 int 之间进行转换时 我感到很困惑 我假设short是16位 int是32位 我用下面的代码进行了测试 unsigned short a 0xFFFF signed short b 0xFFFF unsig
  • 在 Win32 C++ 中创建 GUI

    我正在开发我的第一个 Windows 桌面应用程序 并且正在尝试找出创建该程序的 GUI 的最佳方法 我知道 我知道 考虑到有关该主题的数据量 我觉得问这个问题很愚蠢 然而 大多数答案似乎已经过时 我不确定它们是否适合我的特定项目 另外 W
  • 什么是测试中的软件故障? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在上软件测试的研究生课程 我们花了一整堂课来讨论故障 错误和故障之间的区别 我对测试中软件故障的定义不满意 你的定义是什么 您可能对此感兴趣
  • 何时使用 Vanilla JavaScript 与 jQuery?

    我注意到 在监视 尝试回答常见 jQuery 问题时 有一些使用 javascript 而不是 jQuery 的做法 实际上使您能够少写多做 同样的数量 并且还可能产生性能优势 一个具体的例子 this vs this 在引用被单击对象 i
  • Visual C++ 似乎对类的 POD 成员进行了零初始化,但它不应该这样做

    我有一堂这样的课 class TestClass public TestClass Note I wish not to initialize rawMemory for whatever reason int rawMemory 32 i