初始化静态类对象,没有零参数构造函数c ++

时间:2015-11-18 22:19:46

标签: c++ static initialization copy-constructor

我的代码的相关部分如下:

在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错误。据我所知,静态初始化必须在任何函数之外执行。

所以有任何解决方法吗?

1 个答案:

答案 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->