C++ 映射插入

标签 c++ memory dictionary

// Create sound effect
SoundEffect* newSoundEffect = new SoundEffect(frequencyArray);

if (soundEffects.find(name) == soundEffects.end())
    soundEffects[name] = (*newSoundEffect);

// Clean up memory
delete [] frequencyArray;
delete newSoundEffect;

frequencyArray(上图)和 m_data(下图)是动态分配的。 soundEffects 是一个 std::map。每当我尝试将 newSoundEffect 指向的值插入 soundEffects 时,SoundEffect 的析构函数就会被触发,并且由于某种原因,当析构函数尝试删除 m_data,我收到错误“访问冲突读取位置 0xCCCCCCCC。我在某处读到此位置表示未初始化的内存或其他内容。但在上面的代码片段中,使用 Visual Studio 的调试器,我可以确认newSoundEffect 中的 m_data 指向有效的内存序列。我做错了什么?

~SoundEffect()
{
    if (m_data != NULL)
        delete [] m_data; // Error :(
}

编辑:由于@Chad 的建议,我继续向SoundEffect 类添加了一个复制构造函数,但这并没有帮助,因为虽然 newSoundEffect 肯定是在我尝试将其放入 soundEffects 时构造的,复制构造函数接收一个具有未初始化成员变量的对象;未初始化的 SoundEffect

最佳答案

您的 SoundEffect 类将需要一个复制构造函数和复制赋值运算符才能以这种方式使用。

阅读:The rule of three

关于C++ 映射插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897574/

相关文章:

c++ - 变量在所有来源中必须是绝对全局的

C++ 模板和指针

c++ - 模板参数数量错误

c++ - 如何定义一个以捕获为参数的 lambda 函数?

r - 为什么 R 数据集比从 R 写入但从 Stata 读取的 Stata 数据集占用更多内存

memory - K8S容器是否使用主机操作系统的文件缓存

c++ - 为变量和激活记录保留空间

Python - plotly - 结合气泡和等值线图

Python:将对象分组在一起

dictionary - 在 go 结构中初始化深度映射嵌套