包含不可复制对象的对象的编译警告是不可读的

Compilation warning for Objects that contain non Copyable objects are unreadable

本文关键字:对象 编译 可复制 包含不 警告      更新时间:2023-10-16

我以前问过一个类似的问题,但现在我想更具体一些。我面临的问题是,我有一个对象,其中包含一个不可复制的对象,当有人想要使用我的接口,他没有使用它很好(尝试使用对象的复制构造函数),他将得到一个编译错误,将指向对象,而不是他的实际代码。两个问题:1. 我能以某种方式修复它,将其指向他的原始代码行吗?2. 如果我不能,我怎么能把一个static_assert,只会发生,如果有人实际上试图使用复制c'tor(我已经尝试了一些,但后来我得到他们,即使有人不使用它…)

我正在添加一个示例代码和编译错误,以防我不理解…注意,最后一个编译错误指向ObjectHolder h.文件。而我想让它指向main谢谢!

*是一个错误,当我替换名字…实际上是代码产生了编译错误。让我们假设我不想实现一个私有的copy c'tor只是为了转发copy

的禁用
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:userssomeonedocumentsvisual studio 2012projectstestertesterobjectholder.h(13): error C2248: 'NonCopyableObject::NonCopyableObject' : cannot access private member declared in class 'NonCopyableObject'
1>          d:userssomeonedocumentsvisual studio 2012projectstestertesternoncopyableobject.h(15) : see declaration of 'NonCopyableObject::NonCopyableObject'
1>          d:userssomeonedocumentsvisual studio 2012projectstestertesternoncopyableobject.h(8) : see declaration of 'NonCopyableObject'
1>          This diagnostic occurred in the compiler generated function 'ObjectHolder::ObjectHolder(const ObjectHolder &)'

提供的错误消息不反映所提供的代码。

你有一个错误。考虑以下代码:

class ObjectHolder 
{
    public:
        virtual ~ObjectHolder ();
        ObjectHolder(int i) : obj(i) {}
        ObjectHolder obj;
};

编译器应该如何确定ObjectHolder递归时所需的内存量?