正确设置指针成员变量
setting a pointer member variable correctly
我有一个classL
简化如下:
class L
{
private:
C * _pc ;
public:
C * getc() const ; // getter
void setc(const C * ipc); //setter
~L()
{
delete _pc ;
}
};
其中 C
是另一个 class。
我也有帮手classCHelper
简化如下:
class CHelper
{
C _c ;
CHelper(L & ic)
{
// 1st constructs _c (code omitted);
// then sets ic's _pc pointer member variable :
ic.setc(&_c);
}
};
感觉删除_pc
不知何故会有问题,不确定。怎么样?
这种方法有什么缺陷?如何使用正确的方法达到相同的 "functionality"(正确设置指针成员变量)?
检查 ipc 参数是否像数组一样分配,因为您必须对数组使用 delete [] _pc。
您的代码目前无法编译。
CHelper
的构造函数要求一个 C
对象。 C
class(可能)没有 setc
方法。你可能是说 CHelper(L& ic)
.
无论如何,如果您的 CHelper
对象超出范围并被销毁,那么成员变量 _c
也会随之销毁。在 L
对象中留下悬空指针。不仅如此,L
目前还违反了three/five.
的规则
如果您可以访问 C++11,我强烈建议将原始指针 _pc
和 _c
替换为 std::shared_ptr
如果 CHelper
class 是必需的(因此删除了该析构函数中的 delete
),否则 std::unique_ptr
.
我有一个classL
简化如下:
class L
{
private:
C * _pc ;
public:
C * getc() const ; // getter
void setc(const C * ipc); //setter
~L()
{
delete _pc ;
}
};
其中 C
是另一个 class。
我也有帮手classCHelper
简化如下:
class CHelper
{
C _c ;
CHelper(L & ic)
{
// 1st constructs _c (code omitted);
// then sets ic's _pc pointer member variable :
ic.setc(&_c);
}
};
感觉删除_pc
不知何故会有问题,不确定。怎么样?
这种方法有什么缺陷?如何使用正确的方法达到相同的 "functionality"(正确设置指针成员变量)?
检查 ipc 参数是否像数组一样分配,因为您必须对数组使用 delete [] _pc。
您的代码目前无法编译。
CHelper
的构造函数要求一个 C
对象。 C
class(可能)没有 setc
方法。你可能是说 CHelper(L& ic)
.
无论如何,如果您的 CHelper
对象超出范围并被销毁,那么成员变量 _c
也会随之销毁。在 L
对象中留下悬空指针。不仅如此,L
目前还违反了three/five.
如果您可以访问 C++11,我强烈建议将原始指针 _pc
和 _c
替换为 std::shared_ptr
如果 CHelper
class 是必需的(因此删除了该析构函数中的 delete
),否则 std::unique_ptr
.