【发布时间】:2017-01-12 19:59:16
【问题描述】:
我有一个课程L 简化如下:
class L
{
private:
C * _pc ;
public:
C * getc() const ; // getter
void setc(const C * ipc); //setter
~L()
{
delete _pc ;
}
};
C 是另一个类。
我还有一个帮助类 CHelper 简化如下:
class CHelper
{
C _c ;
CHelper(L & ic)
{
// 1st constructs _c (code omitted);
// then sets ic's _pc pointer member variable :
ic.setc(&_c);
}
};
感觉删除_pc会出问题,不确定。怎么样?
这种方法有什么缺陷?如何以正确的方法达到相同的“功能”(正确设置指针成员变量)?
【问题讨论】:
-
您的方法确实存在问题。首先,当
CHelper对象被销毁时,_c成员也是如此。_pc将指向垃圾。其次,delete _pc;将尝试对同一对象进行第二次销毁。我建议研究 std 智能指针。 -
您的示例将无法编译。在类
L中,析构函数的名称为~C。那是行不通的。此外,您应该在类的构造中将_pc初始化为 nullptr。作为替代方案,您可以考虑使用智能指针,例如shared_ptr或unique_ptr。 -
@AdrianRoman 所以我应该用一个聪明的指针替换原始指针
C * _pc,它会解决我的问题吗?我该怎么办? -
@Hayt 错字,已编辑,抱歉
标签: c++ pointers member setter ownership