【问题标题】:Better alternative for c++ old feature?c++ 旧功能的更好替代方案?
【发布时间】:2009-05-04 09:42:01
【问题描述】:

c++ 已经走了很长一段路,它有很多特性可以用 n 种方式完成相同的任务。 您认为应该避免哪些功能并列出更好的替代方案。

就像在 指针

【问题讨论】:

  • 请创建社区维基 - 这不是一个真正的问题
  • 完成。我要求使用 Smartpointer 代替指针
  • 对于来自 C 甚至旧式 C++ 的人来说,这是一个真正的问题
  • 添加不,我的回答没有任何代表。啊
  • 我的生活悲哀而空虚。代表是唯一让我高兴的东西。另外我把它卖给WOW金农。

标签: c++ language-features


【解决方案1】:

避免 malloc,使用 new。

避免 memcpy,使用复制构造函数。

避免使用#defines,使用consts。

Avoid (C-style) casts, use static_cast<C++>( style casts ).

避免使用宏,使用模板。

如果可以使用前增量,请避免后增量。

避免新的,使用值类型的集合,让集合处理内存管理。

避免指向新对象的指针,使用boost::scoped_ptrboost::shared_ptr.

避免编写自己的代码来遍历集合,使用<algorithm>s

避免重新发明轮子,看看 boost 是否有你需要的东西。

避免使用“char * name”来存储字符串,使用std::string。

Avoid using namespace foo, use using foo::bar.

避免“静态(内部链接)声明”使用未命名的命名空间。

【讨论】:

  • 我不同意通过使用智能指针来避免使用普通指针的概括。至少有两种情况可以使用普通指针:在与使用它们的 3rd 方库交互的情况下,以及在聚合器不拥有引用对象的聚合(零或一多重性)的情况下(实现为指针数据成员)。
  • 我实际上对所有事情都使用普通指针,我真的不记得我遇到的最后一个错误,它甚至与它们松散相关。大多数时候它是为了与现有代码保持一致,但我也会用它们编写全新的类。当然指针成员是私有的,你初始化它们,你有合同设计,你不玩所有权等等。
  • 对不起丹尼尔,我只是想正确地归因。在指针问题上,使用它们是有正当理由的,并且可以安全地使用它们(在 C 之后,就是这样做的)。建议是“避免”,而不是“从不使用”。
  • @tpdi 感谢您的意图,我只是认为删除我的名字可以提高可读性。我同意你的观点。关于指针。 :)
  • "避免编写自己的代码来遍历集合,使用 s" 虽然编写自己的新通用算法通常比折磨现有算法更好,但如果没有适合你的需要。这通常发生在您需要的是 copy_if...
【解决方案2】:

使用新的风格转换

static_cast, const_cast, reinterpret_cast, dynamic_cast,

而不是不再被认为是完全安全的 C 风格转换

与在运行时动态调整数组大小相比,更喜欢使用 STL 容器

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多