You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ 如何在类构造函数中初始化存储对象指针的模板数组容器

问题前置修正:Array模板类适配改造

你当前提供的Array模板所有元素相关逻辑都硬编码为int类型,无法支持存储P*类型数据,需要先做如下修改:

// 修改后的Array.h核心代码
using namespace std;

template <typename T>
class Array {
public:
    Array();
    ~Array();
    void add(T t); // 原参数int改为T
    T get(int index); // 原返回值int改为T,补充实现
    int getSize();
    bool isFull();
    T& operator[] (int); // 原返回值int&改为T&

private:
    int size;
    T* elements; // 原int*改为T*
    static const int MAX_ARR = 256; // 补充const修饰,支持类内初始化
};

template <typename T>
Array<T>::Array(){
    elements = new T[MAX_ARR];
    size = 0;
}
template <typename T>
Array<T>::~Array(){
    delete [] elements;
}
template <typename T>
void Array<T>::add(T t){
    if (size >= MAX_ARR)   return;
    elements[size++] = t;
}
template <typename T>
T Array<T>::get(int index){
    if (index < 0 || index >= size) {
        cerr<<"Array index out of bounds"<<endl;
        exit(0);
    }
    return elements[index];
}
template <typename T>
int Array<T>::getSize(){
    return size;
}
template <typename T>
bool Array<T>::isFull(){
    return size >= MAX_ARR;
}
template <typename T>
T& Array<T>::operator[](int index){
    if (index < 0 || index >= size) {
        cerr<<"Array index out of bounds"<<endl;
        exit(0);
    }
    return elements[index];
}

构造函数初始化方案

情况1:ps是A类的局部变量

默认构造函数会直接初始化空容器,不需要额外赋值,问号处可以直接留空或者写Array<P*>():

A::A(){
    Array<P*> ps; // 直接完成空容器初始化
    // 后续可添加P类对象指针
    ps.add(new P("自定义名称1"));
    ps.add(new P("自定义名称2"));
}

情况2:ps是A类的成员变量

不要在构造函数内重复定义局部变量,直接在构造函数的初始化列表中初始化,或者构造函数内直接操作:

// A.h中类A的声明里添加成员变量
class A {
public:
    A();
    ~A(); // 补充析构函数释放P对象内存,避免泄漏
private:
    Array<P*> ps;
};

// A.cpp构造函数实现
A::A() : ps() { // 初始化列表调用默认构造,也可以省略,编译器会自动调用
    ps.add(new P("自定义名称1"));
}

// 析构函数补充内存释放逻辑
A::~A() {
    for(int i=0; i<ps.getSize(); i++) {
        delete ps.get(i);
    }
}

注意事项

当前实现用裸指针存储P对象,需要手动管理内存避免泄漏,建议替换为std::unique_ptr<P>或者std::shared_ptr<P>自动管理生命周期。

内容的提问来源于stack exchange,提问作者querying_questioner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:15:01