首页 > 解决方案 > 为类字段中的指针分配空间

问题描述

当我的类中有 ptr 字段时,我无法理解何时在构造函数中使用 new 分配内存(使用 D'tor 中的 delete 结束释放它)。例如

class A {
    private:
    type* some_ptr;
    public:
    A(type* data):data(some_ptr);
    ~A();
}

或者应该是:

class A {
    private:
    type* some_ptr;
    public:
    A(type* data) { some_ptr = new type(data) };
    ~A(type* data) { delete data };
}

非常感谢你!

标签: c++

解决方案


  • 我假设您想将构造函数中给出的指针存储在成员变量中
  • 鉴于该类不是创建数据的人,该类不应删除它。也许指针也会在其他地方使用。
  • 析构函数从来没有任何参数!

尝试:

class A {
private:
    type* some_ptr;
public:
    A(type* data) : some_ptr(data) {};
    ~A() {};
}

以下是您可能想要做的事情的列表:

在类中存储给定的指针:

class A {
private:
    int* class_ptr;
public:
    A(int* param_ptr) : class_ptr(param_ptr) {};
    ~A() {};
}

// Note: The Order is importand! 
// Deletion is the reverse from creation
void main() {
    int* int_ptr = new int(5);
    A* a = new A(int_ptr);

    delete a;
    delete int_ptr;
}

如果要在构造函数中创建指向某些数据的新指针,可以这样做:

class A {
private:
    type* some_ptr;
public:
    A() : some_ptr(new type) {};
    ~A() { delete some_ptr; };
}

或者像这样,如果创建依赖于其他一些数据:

class A {
private:
    type* some_ptr;
public:
    A(othertype param) : some_ptr(new type(param)) {};
    ~A() { delete some_ptr; };
}

推荐阅读