首页 > 解决方案 > C++ 构造函数在堆栈中初始化非原始成员变量

问题描述

我有一个关于 C++ 构造函数的基本问题。

假设我有一个类似这样的类定义:

class Project {
public:
    int time;
    std::vector<Task> tasks;

    Project();
};

我想在我的源文件中初始化这个向量,但是我不确定这样做的正确和有效的方法。

Project::Project() {
    time = 0;
    tasks = std::vector<Task>();
}

这是在堆栈中初始化对象的正确方法吗?

标签: c++

解决方案


向量可以使用自定义分配器,因此您可以使用专门用于自定义分配器的向量类(例如这个)。

但是,您不能使用构造函数本身的堆栈,因为它在构造函数完成后变得无效。您要么需要在对象本身中分配内存(在链接的示例中,使arena该类的成员),要么将其作为构造函数的参数接收。


推荐阅读