Разобрать константный указатель? - PullRequest
0 голосов
/ 09 мая 2018

Это, наверное, очень просто, но я застрял и просто не знаю, в чем проблема.

Основной код предопределен как задача. Цель состоит в том, чтобы максимально использовать const. Следующий конструктор просто должен скопировать буквенную строку в const m_data, и это прекрасно работает, но я не могу освободить память - он всегда оставляет 1 блок. Чего мне не хватает?

main.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;
};
}

immu.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;
}
}

1 Ответ

0 голосов
/ 09 мая 2018

Чтобы оставить все блоки памяти массивов, вы должны использовать delete следующим образом:

delete[] m_data;

Спасибо, Робин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...