c++ - 解构const指针?

标签 c++ constructor constants valgrind

这可能是非常基本的,但我被卡住了,根本不知道问题出在哪里。

主要代码被预定义为一个任务。目标是尽可能多地使用 const。以下构造函数只是应该将文字字符串复制到 const m_data 并且工作正常但我无法释放内存 - 它总是留下 1 个 block 。我错过了什么?

主要.cpp

#include <iostream>
#include "immstring.hpp"
using namespace std;
using namespace Util;

int main() 
{
  const ImmutableString s1("Hello");
}

immu.hpp

#include <cstring>
namespace Util {
class ImmutableString {
public:
    ImmutableString(const char* src);
    ~ImmutableString();

private:
    char* const m_data;
};
}

免疫.cpp

#include "immstring.hpp"
#include <iostream>
#include <cstring>
namespace Util 
{
ImmutableString::ImmutableString(const char* src)
    :m_data{strcpy(new char[strlen(src)+1],src)}{}

ImmutableString::~ImmutableString() 
{
    delete m_data;
}
}

最佳答案

要保留所有数组内存块,您必须像这样使用 delete :

delete[] m_data;

谢谢, 罗宾。

关于c++ - 解构const指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255397/

相关文章:

C++ 概念 - 要求括号中的概念导致 2 条相互冲突的错误消息

c++ - Eigen LLT 模块给出不正确的结果?

java - 为什么我的 Java 代码在对象声明后停止响应?

c++ - 从 GCC 4.6 更改为 4.7 时 undefined reference

c++ - 在一行中定义和初始化 STL 常量

从导出到 DLL 的类继承时 C++ 的缺点?

c++ - 如何按类型从 std::tuple 获取元素

java - 调用带条件的构造函数

java - 在调用父类(super class)型构造函数之前无法引用 "X",其中 x 是最终变量

C++ 丢弃迭代器上的限定符 (const)