Никогда не используйте new
, если можете помочь.В современном C ++ в большинстве случаев new
не требуется.Вы можете использовать std::vector
, std::array
, std::string
(std::basic_string<TCHAR>
возможно), std::unique_ptr
или std::shared_ptr
.
Если вы чувствуете, что вам действительно нужно использовать new
, сделайте специальныйкласс, который справится с этим.То есть, например, сделать new
в конструкторе и delete
в деструкторе.
И, конечно, как было сказано в комментариях, никогда не путайте new / delete с malloc / free.Нет необходимости использовать эти функции в C ++ вообще, так как это остатки C.
Редактировать: Добавлен пример, как это может быть обработано самим классом.
struct sStructUsers
{
const int MAX_NAME_SIZE = 128;
sStructUsers()
{
sName = new TCHAR[MAX_NAME_SIZE];
}
~sStructUsers()
{
delete sName;
}
TCHAR *sName;
};
Тогдавам не нужна никакая инициализация / очистка при использовании этого класса.
Обратите внимание, что вам обычно не нужно даже этого делать, вы можете определить свой класс следующим образом:
struct sStructUsers
{
std::basic_string<TCHAR> sName;
};
И иметь полную string
функциональность бесплатно.Или вот так, если вам действительно нужен указатель:
struct sStructUsers
{
const int MAX_NAME_SIZE = 128;
sStructUsers() : sName(new TCHAR[MAX_NAME_SIZE]) {}
std::unique_ptr<TCHAR[]> sName;
};
Или, как я упоминал ранее, используйте другие стандартные контейнеры.