我有这样的想法:
template <typename Item>
class Base
{
public:
Base(Item* arr, int size):
m_data(arr),
m_size(size)
{
for (int i = 0; i < size; ++i)
{
arr[i] = Item();
}
}
private:
Item* m_data;
int m_size;
};
template<typename Item, unsigned int Size=0>
class Derived
{
public:
Derived():
Base<Item>(m_storage, Size)
{
}
private:
Item m_storage[Size]
};
我这样做的原因是我试图初始化存储以便在基类中使用(一个掩护投诉),我已经意识到这可能是错误的方式去做这件事,但我只是想知道为什么当基类试图写入数组时,我会得到一个seg错误。m初始化一个大小为3的变量,该变量是用string作为其项目类型导出的,并且它在for循环的第一次迭代中segfault。
还请注意,我认为这可能不是解决我的覆盖问题的方法,我有另一个解决方案,但我只是真的很好奇,为什么它会seg故障,因为它应该能够访问数组中的静态数据。
谢谢你的帮助。
1条答案
按热度按时间ztmd8pv51#
你的问题是初始化的顺序。
本声明:
假设左边的项已经被初始化,并且它的生命周期已经开始。例如,赋值运算符是一个赋值给一个已经被调用了构造函数的对象。
在你的情况下,这是不正确的。
如果我们看看派生对象: