【发布时间】:2016-06-14 07:36:04
【问题描述】:
假设我有一些看起来像这样的东西:
struct foo {
~foo() = delete;
}
假设我后来动态分配了一个foo类型的对象:
foo *f = new foo;
这很好;我假设合成的默认构造函数用于构造f 表示的对象,但是:
foo f2;
给我一个错误:
尝试使用已删除的函数
那么如果foo 的默认构造函数被隐式删除,f 表示的对象是如何构造的呢?
此外,假设foo 拥有私有成员size_t n。对于动态分配的foo,例如f 表示的n 的值是多少?
【问题讨论】:
-
构造函数没有被删除,只有析构函数被删除(并且需要销毁
f2)。出于同样的原因,你也不能说delete f。 -
@molbdnilo 好的,但是为什么在构造函数没有被删除的情况下我不能构造一个非动态的
foo? -
@Badbit 因为它们在超出范围时会被破坏,所以它们需要一个析构函数。
-
因为构造函数和析构函数在非动态内存分配上被隐式调用。你应该两者都有。
-
@Badbit 我不相信你已经删除了唯一的构造函数。您已经删除了析构函数,并且由于您没有在类中声明任何其他构造函数,因此 C++ 将免费为您提供默认构造函数。
标签: c++ c++11 destructor c++14