Effective C++ 52:写了 placement new 就要写 placement delete

Effective-C++ C++ 异常 指针 动态内存 名称隐藏 构造函数

new和delete是要成对的,因为当构造函数抛出异常时用户无法得到对象指针,因而delete的责任在于C++运行时。 运行时需要找到匹配的delete并进行调用。因此当我们编写了"placement new"时,也应当编写对应的"placement delete", 否则会引起内存泄露。在编写自定义new和delete时,还要避免不小心隐藏它们的正常版本。

JavaScript 内置对象与原型链结构

Chrome JavaScript 原型继承 原型链

JavaScript是一门直译式脚本语言,是一种动态类型、基于原型的语言。 JavaScript的灵活性不亚于C++,你可以使用JavaScript尝试不同的程序设计范型。 比如函数式编程、指令式或过程式编程、以及基于原型的面向对象编程。

不同于Java、C#等面向对象语言,JavaScript采用基于原型的继承方式。 本文便来介绍使用JavaScript进行面向对象编程的核心概念:原型链。

如何检查 JavaScript 变量类型?

JavaScript 构造函数 继承 原型链 类型检查 类型转换 iframe

JavaScript 基本数据类型有 6 种:字符串、数字、布尔、null、undefined、Symbol。 用户定义的类型(object)并没有类的声明,因此继承关系只能通过构造函数和原型链来检查。 本文要解决的问题,如何检查一个变量的类型?先给结论:

如果你要判断的是基本数据类型或JavaScript内置对象,使用toString; 如果要判断的时自定义类型,请使用instanceof

不同的编程语言都有自己的方式来提供类型信息,例如 C# 的反射、C++的Traits, JavaScript 提供类型信息的方式更加灵活(杂),因而也容易误用。 下面来分析常见类型检查手段的区别:typeof, instanceof, constructor, toString。

如果你在寻找类型转换的解决方案,而非类型检查,请移步JavaScript类型转换

上一页 下一页