我最近读到了这样的东西。我知道它没有那么复杂。但作为初学者,我只是不知道它为什么有效,所以这里是描述。
#include <list>
#include <iostream>
using namespace std;
template <typename T>
class A
{
public:
list<T *> testlist;
A();
~A();
void m_append(T* one);
};
template <typename T>
A<T>::A()
{
cout << "constructor" << endl;
}
template <typename T>
A<T>::~A()
{
cout << "destructor" << endl;
}
template <typename T>
void A<T>::m_append(T* one)
{
cout << *one << " push in" << endl;
testlist.push_back(one);
}
int main(void)
{
A<int> a;
int b = 4;
int c = 5;
int d = 6;
a.m_append(&b);
a.m_append(&c);
a.m_append(&d);
return 0;
}
我认为这个testlist没有初始化,应该是有问题。
但它有效。
constructor
4 push in
4
5 push in
5
6 push in
6
destructor
所以我很困惑。不需要初始化这个testlist或者?
答案 0 :(得分:1)
数据成员testlist
在A
的构造函数的成员初始值设定项列表中未提及,并且没有默认成员初始值设定项(C++11起),则为{{3 }} 通过 std::list
的默认构造函数。
和
<块引用>不需要初始化这个testlist还是?
这取决于您的意图。如果默认初始化就足够了,那么是的。
答案 1 :(得分:-2)