#include <memory>
class K
{
public:
static const int k = 4;
};
class C
{
public:
C(int i)
: _i(i)
{}
private:
int _i;
};
int main(int argc, char * argv[])
{
C * pc = new C(K::k);
auto uc = std::make_unique<C>(K::k);
}
访问K :: k时的make_unique barfs,并在许多问题中进行了解释,例如here和here。
这些回答了为什么你需要根据标准定义类外的值。根据标准,这是完全合理的。
我的问题是标准为何以这种方式指定事物。
为什么它不起作用?
这仅仅是今天编译系统的解决方法吗?
如果在头文件中指定了值,为什么标准允许实现只是简单地将值复制出头文件?
为什么不需要跟踪类声明中指定的值并在必要时在链接时为它们创建存储?
如果make_unique因为转发和引用需要其他环节跳转,那么说服人们用std :: make_unique替换new是一个相当大的障碍。