在“C++ Primer”的第 16 章快结束时,我遇到了以下代码(我删除了很多行):
class Sales_item {
public:
// default constructor: unbound handle
Sales_item(): h() { }
private:
Handle<Item_base> h; // use-counted handle
};
我的问题是Sales_item(): h() { }
线路。
为了完整起见,我还要引用我认为与我的问题相关的 Handle 类模板的部分(我认为我不需要显示 Item_base 类):
template <class T> class Handle {
public:
// unbound handle
Handle(T *p = 0): ptr(p), use(new size_t(1)) { }
private:
T* ptr; // shared object
size_t *use; // count of how many Handles point to *ptr
};
我本来期望像这样的:
a)Sales_item(): h(0) { }
这是作者在前几章中反复使用的约定,或
b)Handle<Item_base>()
如果意图是调用 Handle 类的默认构造函数。
相反,这本书的内容是Sales_item(): h() { }
. 我的直觉反应是这是一个错字,因为 h() 看起来与函数声明非常相似。另一方面,我只是尝试在 g++ 下编译并运行使用此类的示例代码,它似乎工作正常。有什么想法吗?
编辑:所有好的答案,谢谢!在中间的 30 分钟内,我找到了同一本书第 12 章的相关引用:“当我们初始化类类型的成员时,我们正在指定要传递给该成员类型的构造函数之一的参数。我们可以使用该类型的任何构造函数。” 正如你们都指出的那样,在这种情况下,我们传递的参数为零。