我之前问过一个类似的问题,但现在我想更具体一点。我面临的问题是我有一个包含不可复制对象的对象,当有人想要使用我的接口并且他没有很好地使用它(尝试使用对象的复制构造函数)时,他会得到一个编译错误,它将指向对象而不是他的实际代码。所以有两个问题:1.我可以以某种方式修复它以将其指向他的原始代码行吗?2.如果我不能,我怎么能放一个只有在有人真正尝试使用副本c'tor时才会发生的static_assert(我已经尝试了一些但即使有人不使用它我也会得到它们...... )
我正在添加示例代码和编译错误,以防我不理解...注意最后一个编译错误指向 ObjectHolder h。文件..虽然我希望它指向主要的谢谢!
*是我替换名称时的错误。实际上是导致编译错误的代码。让我们假设我不想实现一个私人复制 c'tor 只是为了转发残疾复制
class NonCopyableObject
{
public:
virtual ~NonCopyableObject () {}
NonCopyableObject(int i) { m_index = i;}
int m_index;
private:
NonCopyableObject(const NonCopyableObject& other) {}
};
class ObjectHolder
{
public:
virtual ~ObjectHolder ();
ObjectHolder(int i) : obj(i) {}
NonCopyableObject obj;
};
void main()
{
ObjectHolder first(1);
ObjectHolder second(first);
}
1>------ Build started: Project: tester, Configuration: Debug Win32 ------
1> main.cpp
1>d:\users\someone\documents\visual studio 2012\projects\tester\tester\objectholder.h(13): error C2248: 'NonCopyableObject::NonCopyableObject' : cannot access private member declared in class 'NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(15) : see declaration of 'NonCopyableObject::NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(8) : see declaration of 'NonCopyableObject'
1> This diagnostic occurred in the compiler generated function 'ObjectHolder::ObjectHolder(const ObjectHolder &)'