以下は安全ですか?最初のクラス メンバーが初期化された後は d にstd::string
なりませんか? move
正常に印刷されますが、わかりません。
template <typename T>
class Test
{
public:
template <typename... Args>
Test(Args&&... args)
: m_one(new T(std::forward<Args>(args)...)),
m_two(new T(std::forward<Args>(args)...)) // <- Here
{
}
private:
std::unique_ptr<T> m_one;
std::unique_ptr<T> m_two;
};
class C
{
public:
C(int a, int b, const std::string& c)
: m_a(a),
m_b(b),
m_c(c)
{
std::cout << "ctor a=" << m_a << ", b=" << m_b << ", c=" << m_c << "\n";
}
int m_a;
int m_b;
std::string m_c;
};
int main()
{
Test<C> t(1, 2, "3");
}
の 3 番目の ctor パラメータが でC
あるため、問題ないと思いますが、r-value refをconst std::string&
取るクラスで完全な転送を防ぐにはどうすればよいですか?C(int, int, std::string&&)
m_two
m_one
Test の cactor を
template <typename... Args>
Test(Args&... args)
コンパイルしません。std::forward<Args>(args)...
また、 fromm_one
およびm_two
ctorを削除することもありません。