很抱歉,如果问题不清楚。
我有一个在我的头文件中声明的类的对象,因为我稍后需要该对象,但我需要从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
}
答案 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
。