【发布时间】:2016-04-12 17:43:22
【问题描述】:
我的以下设置会在加载时使我的动态库崩溃。
// in a.hpp
template <unsigned int Size>
class ATemplate : public A
{
public:
ATemplate() : A(Size)
{
init()
};
void init()
{
// does stuff, it crashes here or "before" init() because "this" points to some random memory,...
}
}
// in b.hpp
class B
{
public:
static const int Size = 128;
static ATemplate<Size> Template;
}
// in b.cpp
ATemplate<B::Size> B::Template = ATemplate<B::Size>();
// also crashes like this:
ATemplate<B::Size> B::Template;
Afaik,A 和 B 之间的继承在这里不应该很重要,对吧?我已经阅读了有关静态对象初始化顺序的内容,但由于我实际上并没有多个静态对象,只有一个,我认为这在这里并不重要。
你有什么想法,这里可能是什么问题?
【问题讨论】:
-
关于崩溃的更多信息?
-
嗯,这是一个访问冲突,我可以从调试器中得到的是函数 init 是在没有对象的情况下调用的。所有变量都是无稽之谈,“this”没有任何意义。
-
不知道是不是静态初始化顺序惨败要上场了
-
我并没有真正研究它,因为从我读过的内容来看,问题似乎是一个静态变量依赖于另一个静态变量。但是在这种情况下,我只有一个静态成员,对吧?
-
您是否尝试在初始化
B::template之前在b.cpp 中初始化B::size?
标签: c++ templates static initialization runtime