【发布时间】:2017-06-22 12:33:24
【问题描述】:
以下代码在 Visual Studio 的 Visual C++ 19.0 编译器上编译良好,但 gcc 5.4.0 抱怨复制构造函数是私有的。
#include <map>
class CMyClass
{
public:
CMyClass(int) {};
private:
CMyClass(const CMyClass&); // I want to avoid copy construction
};
int main()
{
std::map<int, CMyClass> mymap;
mymap.emplace(0, 0);
return 0;
}
错误信息:
‘CMyClass::CMyClass(const CMyClass&)’ is private
避免复制不正是emplace 的用途吗?我错过了什么吗?
【问题讨论】:
-
所以它需要一个复制构造函数但不会使用它?
-
看起来像 gcc 5.4 中的一个错误。相同的代码compiles with gcc 6。
-
@Bert 对不起,我的错。在某些情况下需要复制构造函数