IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

在 C++ 中引入 gc 后的对象初始化

云风的 BLOG 2010-02-25 09:28:11 累计浏览 3,272 次
本机暂存

这几天白天都在安排面试,其实还是有点累的。晚上就随便写点程序,好久没摸 C++ ,有点生疏。也算是娱乐一下吧。

主要工作其实是在 C 库的基础上做一个 C++ 的中间层。跟在 C 库的基础上做 lua 中间层差不太多。前几天加入了 gc 后,发现了一些有趣的用法。

比如对于构造对象。 C 的 api 中,如果创建一个对象失败,就会返回空指针。但是对于 C++ 就不一样了,new 是不应返回空指针的。书本上的推荐做法是在构造函数里抛异常。但是我又不太想进一步的引入异常机智,怎么办呢?

简单的方法是让 C++ 的封装类的构造函数什么都不干。btw, 我听 google 的 Mike Burrows 也讲过 popular C++ constructs can be bad for abstraction 。

然后加一个 init 函数来初始化这个对象,成功则返回 this 指针,失败则返回 NULL。

如果没有 gc 的时候,我需要这样做:

以下是代码片段:
A *a = new A;
if (!a->init()) {
  delete a;
  a = NULL;
}

有了 gc 后很方便,只需要

以下是代码片段:
A *a = (new A)->init();

嘿嘿,有 gc 还是方便很多呀。只是 new 的操作优先级让我有点不爽。

ps. 我知道即使没有 gc ,我也可以用很现代的 template 技术做到同样的事情。而且代码看起来更有品味。不过我感觉自己越来越老土了,写 C++ 也越来越 C Style 了。完全没有 10 多年前对 C++ 的火热激情。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 如何学好C++语言 (累计阅读 10,448)
  2. Emacs配置C/C++-mode的代码智能提示和自动补全 (累计阅读 10,412)
  3. colortail,让 tail 命令绚丽起来 (累计阅读 10,259)
  4. PHP的异常原理与实例说明 Fatal error: Uncaught exception (累计阅读 9,763)
  5. 在C++中实现foreach循环,比for_each更简洁! (累计阅读 9,500)
  6. 几个内存相关面试题(c/c++) (累计阅读 9,445)
  7. 关于使用STL的红黑树map还是hashmap的问题 (累计阅读 8,876)
  8. 浅析C++多线程内存模型 (累计阅读 8,803)
  9. C++ 多线程编程总结 (累计阅读 8,097)
  10. 是返回错误码,还是抛出异常?说说我的选择 (累计阅读 7,546)