你好我想這個字符指針釋放內存,但因爲它是作爲名稱初始化我不能刪除/釋放它。我該如何處理這種情況?我的頭文件和實現文件如下所示。問題,在正確釋放內存
/// Header file.
#ifndef __DAY_H__
#define __DAY_H__
class day {
private:
char* name;
int nClasses;
bool status; //working day or a holiday
public:
day();
day(char * name, int place, bool status);
day(const day&);
//operator=(const day&);
~day();
char * getName() const;
int getClasses() const;
bool getStatus() const;
void setName (char * name);
void setClasses (int classes);
void setStatus (bool status);
};
#endif
/// .cpp file
#include <iostream>
#include "day.hpp"
#include <string.h>
day::day()
{
name = new char[10];
name = "Monday";
nClasses = 1;
status = true;
}
day::day(char * _name, int _classes, bool _status)
{
name = new char[10];
strncpy(name, _name, 10);
nClasses = _classes;
status = _status;
}
day::day(const day& _myday)
{
name = new char[10];
name = _myday.name;
nClasses = _myday.nClasses;
status = _myday.status;
}
char*
day::getName() const
{
return name;
}
int
day::getClasses() const
{
return nClasses;
}
bool
day::getStatus() const
{
return status;
}
void
day::setName(char * _name)
{
name = _name;
}
void
day::setClasses(int _classes)
{
nClasses = _classes;
}
void
day::setStatus(bool _status)
{
status = _status;
}
day::~day()
{
if (name != 0) {
std::cout << "Deleting name" << std::endl;
delete name;
}
}
感謝您的幫助。
使用**的std :: string **,忘記所有這些問題! – Mat
如果你只是使用'std :: string',你意識到你可以避免所有這些痛苦? –
請刪除所有不相關的代碼。您發佈的大部分內容與您所報告的問題無關。另外,如果你不能使用'std :: string',你應該在問題中提到它。 – juanchopanza