是否有任何情况下,具有已删除CTOR的课程可能有用
Is there any case where a class with deleted ctor could be useful?
我想知道为什么标准允许这种声明。
class A
{
public:
A() : bar(0){}
A(int foo) : bar(foo){}
private:
int bar;
};
class B : public A
{
public:
B() = delete;
};
b不能实例化。
B b1; //error: use of deleted function ‘B::B()’
B b2(2); //error: no matching function for call to ‘B::B(int)’
仍然是
class A
{
public:
A() : bar(0){}
private:
int bar;
};
class B : public A
{
public:
B() = delete;
};
给出
B b1; //error: use of deleted function ‘B::B()’
注意:这是不同的,没有默认的ctor:
class G
{
protected:
int assign;
};
class H : public G
{
public:
H() = delete;
};
给出
G g1; //works
//H h1; -- error: use of deleted function ‘H::H()’
是否有任何有用的情况?
是否有任何情况下有删除CTOR的课程有用?
可以在不创建实例的情况下使用类。此类类的大多数典型示例是类型特征:例如std::is_same
和std::numeric_limits
的所有功能,无需创建实例而使用。因此,可以删除其构造函数而不会失去任何功能。
也就是说,通常不需要删除此类类的构造函数,实际上,标准类型特征的隐式续部分未删除。构造函数的删除通常仅用于删除某些构造函数,而不是全部。要明确:仅仅因为某事不是典型的东西,并不意味着它应该是错误。
是的,有很多次没有默认构造函数的类很有用。
实际上,我的大多数课程都没有默认的构造函数。他们采用一些选择或一些初始状态。
即使在这种意义上没有"有用"(例如,当您离开 no 其他构造函数时(,也无需该标准来禁止它,因为那时实施将不得不竭尽全力实施禁令,所以根本没有收益。就像,如果这意味着课堂设计没有意义,那就是您的错,您可以简单地重写班级以更适合您的需求。
似乎这里的问题不是使用已删除的默认构造函数的类是否有用,而是无法构造的类有用有用。
我认为答案是"否"的,但是标准并不预期并禁止所有可能的无用声明案件。
相关文章:
- 给定使用 C++ 或 C,我如何测量在 linux 下进行线程切换需要多长时间?可能吗?
- 为什么"non-standard syntax; use '&' to create a pointer to member"在 CTOR 中使用线程?
- 对象的 ctor 和 dtor 必须在同一线程上吗?
- 线程功能之一不执行可能的比赛条件
- 是否有任何情况下,具有已删除CTOR的课程可能有用
- 在关闭应用程序期间正确关闭线程,该线程可能会运行很长时间的循环
- 可能以有效的方式在模拟的循环中进行多线程
- 在多线程中是否可能发生读取对象的一半大小?
- 通过向量迭代,而其他线程可能会对其进行修改
- 是否可以安全地(读取)从BITSET(C )进行一些访问,该咬合可能会通过其他线程修改
- 分割故障,可能的原因:功能指针,多线程,STL地图等
- 一个整数可以安全阅读,而另一个线程可能会在其中编写
- 在多线程环境中,什么可能导致"bad file descriptor"?
- OOP结构,可能还有一些关于线程的东西
- windows DLL是否有可能在多个线程或进程之间使用相同的套接字编号
- 如果从其他线程访问(读/写)src缓冲区,是否有可能从memcpy获得访问冲突
- 使用packaged_task和线程可能的数据争用
- 多线程可能会抑制编译器优化
- 只有一个线程可能会导致 Linux 上的程序死锁或冻结
- 当一个线程正在编写另一个线程可能同时执行的代码时,如何在ARM上同步