C ++如何在头文件中调用构造函数并存储在对象中?

时间:2016-01-03 19:36:25

标签: c++

很抱歉,如果问题不清楚。 我有一个在我的头文件中声明的类的对象,因为我稍后需要该对象,但我需要从cpp文件中调用该构造函数。 但是,例如我写Class class(something_in_constructor);

这与我在头文件中声明的对象不同。有谁知道如何调用该类的构造函数并实际将其“存储”在头文件中创建的对象中?

我希望我很清楚,先谢谢。

修改

我想要做的例子(这不会编译,我知道但仅举例):

Test.h:

class Test {
private:
    Class class;
    void callConstructor();
};

Test.cpp的:

void Test::callConstructor() {
    Class class(something); //THIS WORKS I KNOW BUT I NEED THE OBJECT I CREATED IN TEST.H FOR LATER USE BUT I CAN NOT CALL CONSTRUCTOR IN HEADER FILE
    class = class(something); //THIS DOES NOT WORK BUT MAYBE IT IS CLEARER NOW WHAT I NEED TO DO

}

1 个答案:

答案 0 :(得分:2)

我认为您尝试做的是延迟成员class的构建,直到调用函数callConstructor为止?

在这种情况下,所发生的是所有类成员在构造类Test时被启动,对于那些没有为其构造函数提供参数的成员,它们将是default initialized

因此,在调用函数callConstructor时,已使用默认初始化构造class

如果你想为它的构造函数提供参数,那么你必须在构造父类Test时提供它们。

无法使用自动存储持续时间使用未初始化的类成员初始化类,这将是一个错误。

或者,您可以通过智能指针使用动态分配std::unique_ptr例如

class Test {
private:
    std::unique_ptr<Class> class;
    void callConstructor();
};

void Test::callConstructor() {
    class = std::make_unique<Class>(ARG1, ARG2);
}

然而,这是不一样的,因为在调用callConstructor之前不会创建对象(智能指针的内部引用将在构造时初始化为nullptr )。这意味着在调用函数class之前访问callConstructor将导致nullptr