- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设我们有一个(玩具)C++ 类,如下所示:
class Foo {
public:
Foo();
private:
int t;
};
Foo
创建一个析构函数。 .如果析构函数不需要清理任何动态分配的内存(也就是说,我们可以合理地依赖编译器给我们的析构函数),则将定义一个空的析构函数,即。
Foo::~Foo() { }
Foo::Foo() { }
?
最佳答案
它会做同样的事情(本质上什么都没有)。但这和没有写不一样。因为编写析构函数将需要一个工作的基类析构函数。如果基类析构函数是私有(private)的,或者有任何其他原因无法调用它,那么你的程序就有问题。考虑这个
struct A { private: ~A(); };
struct B : A { };
struct A { private: ~A(); };
struct B : A { ~B() { /* ... */ } };
~B
的定义时间导致诊断。 .
struct C;
struct A {
auto_ptr<C> a;
A();
};
C
的对象在
.cpp
中 A 的构造函数的定义中创建文件,其中还包含 struct
C
的定义.现在,如果你使用 struct
A
,并要求销毁
A
对象,编译器将提供析构函数的隐式定义,就像上面的例子一样。该析构函数还将隐式调用 auto_ptr 对象的析构函数。这将删除它持有的指针,指向
C
对象 - 不知道
C
的定义!出现在
.cpp
定义结构 A 的构造函数的文件。
.cpp
中提供它的空定义。文件,其中结构
C
被定义为。当它调用其成员的析构函数时,它就会知道 struct
C
的定义。 , 并且可以正确调用它的析构函数。
struct C;
struct A {
auto_ptr<C> a;
A();
~A(); // defined as ~A() { } in .cpp file, too
};
boost::shared_ptr
没有这个问题:当它的构造函数以某些方式被调用时,它需要一个完整的类型。
memset
时。和这样的对象上的 friend ,该对象具有用户声明的析构函数。这些类型不再是 POD(纯旧数据),并且不允许进行位复制。请注意,这个限制并不是真正需要的 - 下一个 C++ 版本已经改善了这种情况,因此只要不进行其他更重要的更改,它仍然允许您对此类类型进行位复制。
struct A {
int a;
};
struct B {
int b;
B() { }
};
assert(A().a == 0);
b
从未初始化(您的构造函数省略了它)。该值可能为零,但也可能是任何其他奇怪的值。试图从这样一个未初始化的对象中读取会导致未定义的行为。
assert(B().b == 0);
new
中使用此语法也是如此。 , 喜欢
new A()
(注意末尾的括号 - 如果省略它们,则不会进行值初始化,并且由于没有用户声明的构造函数可以对其进行初始化,
a
将保持未初始化状态)。
关于c++ - 'empty' 构造函数或析构函数会做与生成的相同的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1025313/
我有一个包含两个项目的解决方案,每个项目都生成一个单独的 dll,供另一个 Windows 应用程序使用。这些项目中的每一个都有一个名为 MyActions 的类,只有一个这样的方法 项目 1
我有一个包含两个项目的解决方案,每个项目都生成一个单独的 dll,供另一个 Windows 应用程序使用。这些项目中的每一个都有一个名为 MyActions 的类,只有一个这样的方法 项目 1
所以我在 if 语句中有这段代码如下 if (!inTime || !moment(inTime).format('m') % 15 === 0) { doSomething(); } 传入的 inT
像往常一样,我想做的比我知道的还多:-D 这就是我正在做的事情......我正在写一篇简历。 但是在简介中,我想要一个“长简介”和一个“短简介”按钮。 长传记显然会显示整个传记,但短传记会捕获列表中的
我正在使用物质。 js创建一个二维场景。我在场景中对一个物体施加力,这个物体撞击其他物体,但最终所有物体都因摩擦和能量损失而停止移动。 我需要以某种方式检测场景中的所有物体何时停止移动。我发现这样
谁能快速浏览一下这段代码,让我知道哪里出错了。 在模糊事件中,.textok 类加载正常,但 .textbad 类加载不正常。 .textok { color:#0F0; background
我的情况是这样的:我有一个项目,它使用了一些生成的代码。在生成的代码中,几乎所有文件中都硬编码了某个 URI。 因此,在某些时候我得到了两个生成的代码库:一个针对开发,另一个针对暂存。 我想通过 Gr
这是一个严肃的问题(见我的评论)。 问题很简单:Java 所做的所有 SEO 不友好的事情有哪些会导致您的网站在主要搜索引擎中的排名不如应有的好? 最佳答案 有一个与 JSESSIONID 相关的 s
我正在使用 PHP。我想完成 jQuery AJAX 进程,(完成进程并数据返回主页后)。 然后执行下一个 jQuery 操作。关于如何做到这一点有什么想法吗? $.ajax({ url: "pa
在释放内存之前,我要从 CPU 缓存中逐出内存范围。理想情况下,我只想放弃这些缓存行而不将它们保存到内存中。因为没有人会使用这些值,无论谁再次获得该内存范围(在 malloc()/new/_mm_ma
我不喜欢 jackson 。 我想使用 ajax,但要使用 Google Gson。 所以我试图弄清楚如何实现我自己的 HttpMessageConverter 以将其与 @ResponseBody
我是一名优秀的程序员,十分优秀!