正确设置指针成员变量

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.