关于STL list中装载引用语义的删除讨论,该怎么处理
关于STL list中装载引用语义的删除讨论
前提:list中装载的引用语义(对象指针),非值语义,这里不是讨论值语义与引用语义。
请高手指点,下面的代码有没有内存问题。代码在BCB6.0中编译通过。
//---------------------------------------
#pragma hdrstop
//---------------------------------------
#include <list.h>
#include <iostream.h>
#include <algorithm.h>
#pragma argsused
const MAX_BUFFER_1 = 256;
const MAX_BUFFER_2 = 65536;
class _Parameter
{
private:
char *_name;
public:
char* __fastcall name(void) { return _name; }
__fastcall _Parameter(char* value)
{
_name = NULL;
_name = new char[strlen(value) + 1];
strcpy(_name, value);
}
__fastcall ~_Parameter()
{
std::cout < < "销毁对象: " < < _name < < std::endl;
//释放对象资料
if (_name != NULL)
delete[] _name;
}
};
template <class t> //查找函数
class findvalue
{
private:
char *_name;
public:
findvalue(char *name) : _name(name) { }
bool operator()(const t* ptr) const
{
if (strcmp(ptr-> name(), _name) == 0)
return true;
else
return false;
}
};
template <class t> //查找符合条件的容器项,并删除该项中的内容--对象指针。
class removevalue
{
private:
char *_name;
public:
removevalue(char *name) : _name(name) { }
bool operator()(const t* ptr) const
{
if (strcmp(ptr-> name(), _name) == 0)
{
delete ptr; //在此外删除对象,可行吗?
return true;
前提:list中装载的引用语义(对象指针),非值语义,这里不是讨论值语义与引用语义。
请高手指点,下面的代码有没有内存问题。代码在BCB6.0中编译通过。
//---------------------------------------
#pragma hdrstop
//---------------------------------------
#include <list.h>
#include <iostream.h>
#include <algorithm.h>
#pragma argsused
const MAX_BUFFER_1 = 256;
const MAX_BUFFER_2 = 65536;
class _Parameter
{
private:
char *_name;
public:
char* __fastcall name(void) { return _name; }
__fastcall _Parameter(char* value)
{
_name = NULL;
_name = new char[strlen(value) + 1];
strcpy(_name, value);
}
__fastcall ~_Parameter()
{
std::cout < < "销毁对象: " < < _name < < std::endl;
//释放对象资料
if (_name != NULL)
delete[] _name;
}
};
template <class t> //查找函数
class findvalue
{
private:
char *_name;
public:
findvalue(char *name) : _name(name) { }
bool operator()(const t* ptr) const
{
if (strcmp(ptr-> name(), _name) == 0)
return true;
else
return false;
}
};
template <class t> //查找符合条件的容器项,并删除该项中的内容--对象指针。
class removevalue
{
private:
char *_name;
public:
removevalue(char *name) : _name(name) { }
bool operator()(const t* ptr) const
{
if (strcmp(ptr-> name(), _name) == 0)
{
delete ptr; //在此外删除对象,可行吗?
return true;