我的代码的相关部分如下:
在foo.h中:
namespace foo_ns {
class Foo
{
static Class1 object1;
};
}
在foo.cpp
#include <foo.h>
namespace foo_ns {
Class1 Foo::object1(/*another object. Need to call copy constructor*/)
}
这里,&#34;另一个对象&#34;在main()
中定义。此外,Class1是大型库的一部分,并且没有零参数构造函数,因此只需删除括号就会在编译期间出现no matching function call
错误。据我所知,静态初始化必须在任何函数之外执行。
所以有任何解决方法吗?
答案 0 :(得分:1)
当然,如果Class1
有以后可以使用的方法,那么一个简单的解决方案就是:
Class1 Foo::object1(some_rubbish);
// in main
object1 = Class1(the_real_initializer);
如果Class1
没有工作分配操作符,但可以安全地销毁并重新创建,则可以在main中写入:
object1.~Class1();
new(&object1) Class1(the_real_initializer);
虽然如果这个构造函数抛出,那么你必须中止该程序。
如果在程序结束之前无法正确销毁Class1
,则必须推迟初始化,例如:
static std::unique_ptr<Class1> p_object1;
然后在主要时,当你准备好了,
p_object1.reset( new Class1(bla bla bla) );
这样您就必须更改访问object1.
的任何其他代码,以改为使用p_object1->
。