【发布时间】:2021-08-28 21:08:07
【问题描述】:
当我使用智能指针时,我总是需要用工厂函数来构造它,例如std::make_shared<T> 和 std::make_unique<T>,我不使用带有指针的构造函数,因为我试图避免 new 的任何用法/外观。但我的问题是,为什么 C++ 标准没有包含一个将参数列表转发到 T 类型的构造函数?喜欢而不是shared_ptr<T> make_shared(Args&&...),我们可以有以下内容:
shared_ptr<T>::shared_ptr(Args&&...) {...}
unique_ptr<T>::unique_ptr(Args&&...) {...}
【问题讨论】:
-
可能很难(但并非难以置信)得到一个非意见的答案。我首先想到的是如果
T可以从T*构造出来呢?这个案子的模棱两可值得吗?这可能是一个见仁见智的问题,除非有人能从标准委员会那里找到讨论这一点的说明。 -
关于“我尽量避免使用
new”,为什么?我知道赤裸裸的new电话通常是个坏主意,但并非在所有情况下都如此。如果在智能指针构造函数中使用该关键字肯定可以吗? -
一个问题是,在这种情况下,您可能不希望使用默认构造函数来构造对象,而是使用
nullptr。
标签: c++ c++11 stl smart-pointers