之前我问了一个类似的问题,但现在我想更具体一点。 我面临的问题是我有一个包含不可复制对象的对象,当有人想使用我的界面并且他没有很好地使用它时(尝试使用对象的复制构造函数),他将得到一个编译错误,指向对象而不是他的实际代码。 所以有两个问题: 1.我能以某种方式修复它以指向他原来的代码行吗? 2.如果我不能,我怎么能放一个static_assert,只有当有人真正试图使用复制c'tor时才会发生(我已经尝试了一些但是即使有人不使用它我也会得到它们... )
我正在添加示例代码和编译错误以防我不理解... 注意最后的编译错误指向ObjectHolder h。文件..虽然我希望它指向主要 谢谢!
当我替换名称时,* 是一个错误..它实际上是创建编译错误的代码。 我们假设我不想实施私人复制,只是为了转发残疾复制
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 &)'
答案 0 :(得分:1)
提供的错误消息不反映所提供的代码。
除此之外你有一个错误。考虑代码:
class ObjectHolder
{
public:
virtual ~ObjectHolder ();
ObjectHolder(int i) : obj(i) {}
ObjectHolder obj;
};
编译器如何确定ObjectHolder
递归时所需的内存量?