【发布时间】:2014-11-30 00:53:57
【问题描述】:
在 Foo 类中,我有一个 Bar 类型的成员变量。 Bar 是在我的 Foo 构造函数中通过传入一个指向这样的数组的指针来构造的:
template<typename> T
class Foo{
Bar myBar;
size_t mySize;
size_t top;
Foo(size):myBar(new T[size]),mySize(size),top(0){}; //creates a Bar element of certain size
}
template<typename> T
class Bar{
T* myListPtr;
Bar::Bar(T* tPtr):myListPtr(tPtr){} //stores a pointer to a T array
}
现在据我所知,如果 T 有一个默认构造函数,C++ 应该在数组中的所有元素上调用它。但是,当我输出指向的值时,我得到了一个这样的数组(size=8 和 T 类型 'double')
9.3218e-306
0
0
0
0
3.81522e-270
nan
nan
我如何确保所有值都是默认初始化的,而不仅仅是一些。该数组可能包含 char、double 等任何类型,但该类型将始终具有默认构造函数。什么可能导致这个问题?
【问题讨论】:
-
请发帖MCVE。
-
为什么你认为复制指向元素数组的指针时会复制任何元素?
-
@Chris 好吧,不,并非总是如此。而且没有“C/C++”这样的东西,所以请停止传播这个神话。干杯。
-
@Chris:C 不是 C++ 的子集。
-
与其发布 cmets,不如花点时间准备一份 MCVE?否则,您无法期望您的问题得到很好的回答。
标签: c++ arrays templates initialization default-value