我有一个结构/类,其成员是指针,比如说
struct myStruc
{
int* m_p;
}
1。问题:我应该在哪里删除指针?在析构函数中?
myStruct::~myStruct()
{
delete m_p;
}
2。问题:如果将指针指定给指针数组,例如
,该怎么办?myStruct mS;
mS.m_p = new int[3];
如果我必须delete
或delete[]
,是否有一种好方法(没有dynamic_cast或try-catch)?
答案 0 :(得分:3)
您不应该允许“用户”弄乱数据结构中的指针。将指针设为私有,并使用get / set函数来访问它。
所以:
struct myStruc
{
private:
int* m_p;
public:
int* ptr() { return m_p; }
void allocate(int n) { m_p = new int[n];
myStruc() : m_p(0) {};
~myStruc() { delete [] m_p; }
};
编辑:上面的类不完整,它显示了这个概念。对于完整的类,您需要一个复制构造函数和赋值运算符,并且可能“记住”n
函数中的allocate
。
现在你永远不必担心你是否与[]分配,因为它是一致的。
当然,您可以使用std::vector
来实现此目的,而无需任何额外的努力。
答案 1 :(得分:2)
理想情况下,您根本不应使用原始指针成员。你有两个更好的选择:
std::vector
或如果你不能使用智能指针并且必须使用原始指针,那么:
new
分配指针,则使用delete
,如果您使用new []
,则需要使用delete []
。应该没有不匹配。 delete
或delete []
。假设该成员的生命周期与您的类的生命周期相同,它将在析构函数中。 答案 2 :(得分:0)
delete[]
。 new/new[]
应分别使用delete/delte[]
。