但是今天我突然想到:你何时需要自定义析构函数、拷贝构造函数、拷贝赋值构造函数、移动构造函数或移动赋值构造函数呢?
在我看来,隐式构造函数/析构函数对于聚合数据结构来说已经足够了。然而,那些管理资源的类需要用户定义的构造函数/析构函数。
不过,所有管理资源的类都可以使用智能指针转换为聚合数据结构,这是不是可以呢?
例如:
// RAII Class which allocates memory on the heap.
class ResourceManager {
Resource* resource;
ResourceManager() {resource = new Resource;}
// In this class you need all the destructors/ copy ctor/ move ctor etc...
// I haven't written them as they are trivial to implement
};
vs
class ResourceManager {
std::unique_ptr<Resource> resource;
};
现在示例2的行为与示例1完全相同,但是所有隐式构造函数都起作用。
当然,你不能复制ResourceManager,但如果你想要不同的行为,可以使用不同的智能指针。
关键是当智能指针已经有了用户定义的构造函数时,就不需要再定义隐式构造函数了。
我唯一能想到需要使用用户定义构造函数的原因是:
1.在某些低级代码中无法使用智能指针(我非常怀疑这种情况会发生);
2.正在实现智能指针本身。
然而,在正常的代码中,我看不出使用用户定义构造函数的任何理由。
我错过了什么吗?