如何在单个语句中从现有对象的副本创建和初始化 unique_ptr?

How do I create and initialize unique_ptr from a copy of an existing object in a single statement?

想象一下,我在某处定义了 const Matrix IDENTITY_MATRIX,随时可以将其作为基线进行复制。 Matrix 只是一个 struct.

如果我想创建一个指向新 Matrix 实例的智能指针,用 IDENTITY_MATRIX 的副本初始化,我可以这样做:

std::unique_ptr<Matrix> foo(new Matrix);
*foo = IDENTITY_MATRIX;

有没有一种方法可以使用一条语句来执行初始化?我不想编写辅助函数来执行此操作。如果需要,我将使用两个语句进行初始化。

使用 new 表达式提供初始值设定项

std::unique_ptr<Matrix> foo(new Matrix(IDENTITY_MATRIX));

或使用make_unique

auto foo = std::make_unique<Matrix>(IDENTITY_MATRIX);