【问题标题】:Static Template Member Crashes静态模板成员崩溃
【发布时间】: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


【解决方案1】:

编辑:这是堆栈溢出。现在我必须找出为什么编译器会决定将静态成员对象放在堆栈上,...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多