模板复制构造函数

Fro*_*art 8 c++

鉴于以下代码,Foo有复制构造函数吗?将Foo与STL容器一起使用是否安全?

class Foo
{
public:
   Foo() {}

   template <typename T>
   Foo(const T&) {}   
};
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 10

该标准明确指出,复制构造函数是一个非模板化的构造函数,它接受对同一类型的可能const-volatile对象的引用.在上面的代码中,您有一个转换但不是复制构造函数(即它将用于复制之外的所有内容,其中将使用隐式声明的构造函数).

是否Foo有一个拷贝构造函数?

是的,隐式声明/定义的复制构造函数.

使用Foo标准库容器是否安全?

使用它的当前定义Foo是,但在一般情况下,它取决于成员Foo具有什么以及隐式定义的复制构造函数是否正确地管理它们.