包含不可复制对象的对象的编译警告是不可读的
Compilation warning for Objects that contain non Copyable objects are unreadable
我以前问过一个类似的问题,但现在我想更具体一些。我面临的问题是,我有一个对象,其中包含一个不可复制的对象,当有人想要使用我的接口,他没有使用它很好(尝试使用对象的复制构造函数),他将得到一个编译错误,将指向对象,而不是他的实际代码。两个问题: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
递归时所需的内存量?
相关文章:
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 如何制作一个作为类对象并具有编译时大小的数组?
- 由于缺少类模板,NVCC 编译面向对象代码时出现问题
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 仅为从某种语言编译的对象添加链接库?
- 确保在编译期间仅同时使用来自同一工厂的对象
- 编译错误:临时对象构造函数中缺少参数
- 将 std::variant 与 gmock 1.8 对象一起使用时编译错误
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- 混合单独编译的对象
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 编译问题 C++ 同时,尝试通过调用另一个对象中的成员函数来创建 std:: 线程
- 初始化不可移动对象数组:为什么这样的代码无法在 GCC 上编译?
- C++对象文件和程序文件组合编译的 Bashrc 别名
- 将TopoDS_Face对象分配给其子对象编译没有错误,但我有 3 个 valgrind 错误
- 是否为每个C++对象编译了多个成员函数?
- c++LogFile对象编译错误
- 为派生类的每个对象编译的vftable