我是否正确地假设
class D { /* ... */ };
int f (const D & t) { return /* something calculated from t */; }
template<class T>
class C {
private:
int m_i;
T m_t;
// or first m_t, then m_i -- careless order of declarations
public:
template<class T_>
C (T_ && t) : m_t (std::forward<T_> (t)), m_i (f (t)) {
}
};
C<D> c (D ());
可能会导致错误,因为调用t
时的值已被移走f(t)
?m_i
除了 (i) 使用工厂函数或 (ii) 引入对声明和的顺序的依赖关系之外,还有什么方法可以避免这个问题m_t
?