从优秀源码中学到的两个技巧

这篇具有很好参考价值的文章主要介绍了从优秀源码中学到的两个技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

设计一个不能被using的对象

  在实际开发中为了避免命名空间污染,一般都不会using namespace std。但是如果一个对象写起来比较复杂,用using能大幅度地简化操作。现在假设我们要设计一个函数,它在一个作用域里面,使用它只能以A::B::C()这种形式。思考一下,如果我们放在命名空间下,是可以被using简化的。我们不妨可以试试设计一个结构体。

class A {
    public:
        static void hello() {
            std::cout << "Hello World\n";
        }

        static void f() {
            std::cout << "Goodbye World\n";
        }

        static void g() {
            std::cout << "Nothing\n";
        }

        A() = delete;
        A(const A& other) = delete;
        ~A() = delete;
        A& operator= (const A& other) = delete;
};

  我们可以把构造函数,析构函数,拷贝构造还有拷贝赋值这一类函数都删掉,因为并不打算构造一个对象。除此之外,每个成员函数都用static修饰,因为它与实例化无关。这样,当我们想要调用hello函数的时候,我们可以A::hello(),这样就达到了目的。

 

禁止自己拷贝自己

  这段代码其实是可以通过编译的。

int n = n;

  同样,如果设计的类不经过特殊处理,诸如此类的操作也是可以通过编译的。通过引入assert断言的手段我们可以解决这个问题。

class Base {
    int data;

    public:
        Base(int data) : data(data) {}

        Base(const Base& other) {
            assert(&other != this);
            data = other.data;
        }
};

  只需判断拷贝的地址是否与this指针指向的地址相同即可。文章来源地址https://www.toymoban.com/news/detail-710150.html

到了这里,关于从优秀源码中学到的两个技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何设计一个优秀的 Go Web 项目目录结构

    Go 语言作为一门高效、简洁、并发安全的语言,越来越受到开发者们的青睐,特别是在 Web 开发及云原生领域。而对于一个大型的 Go Web 项目而言,一个优秀的目录结构设计是必不可少的。它可以帮助我们更好地组织代码、减少冗余、提高可维护性和可扩展性。 在本文中,我

    2024年02月12日
    浏览(84)
  • Code Review时学到的技巧之isAssignableFrom

    🍊 Java学习:Java从入门到精通总结 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年4月1日 🍊 个人简介:通信工程本硕 for NJU💪、Java程序员🌕。做过科研paper,发过专利,优秀的程序员不应该只

    2023年04月15日
    浏览(30)
  • 19学习提升:gRPC源码中的那些优秀设计(上)

    gRPC作为高性能的RPC框架,离不开它优雅的设计和编码,无论是作为一名底层开发者还是上层的业务开发者,能够写出一手好的代码一直都是决定自身水平高低的一个重要体现,如果想要达到一个较高层次的水平,离不开长时间的学习和训练以及不断的感悟,而一些优秀的开源

    2023年04月09日
    浏览(26)
  • 【计算机毕业设计】五篇优秀的管理系统毕业设计(附下载源码和论文)

    本文将推荐5篇XXX管理系统的毕业设计免费下载,适用于计算机类专业的本科生及从业者学习交流使用。 如果你对自己的毕业设计的要求是朴实无华且能收获稳稳的幸福,那么XXX管理系统的选题及本文将非常适合你。 1、【毕业设计】基于SpringBoot及thymeleaf搭建的疫情信息管理

    2024年02月08日
    浏览(39)
  • 无偿分享一个很有用的看源码小技巧

    怎么在 idea 里面查看 git 提交记录呢?这个界面是藏在哪里的呢,我的 idea 里面怎么没有呢? 好的,是我疏忽了,我先入为主的认为这个大家应该都知道是怎么来的。 但是确实是有一些同学是不太清楚的,那我这篇文章就给大家分享一下我通过这个东西看源码的一点点小技巧

    2024年01月20日
    浏览(28)
  • Java【算法 05】通过时间获取8位验证码(每两个小时生成一个)源码分享

    要求是很简单的,每个验证码的有效时间是 2小时 ,这个并不是收到验证码开始计时的,而是每个两小时的时间段使用的是相同的验证码。 将 2个小时处理为相同的值 : 很简单的算法分享。优点: 不需要将生成的验证码缓存。 时间入参,能够重复获取相同的值。

    2024年02月05日
    浏览(23)
  • 【Unity小技巧】手戳一个简单易用的游戏UI框架(附源码)

    参考原视频链接: 【视频】:https://www.bilibili.com/video/BV1zT411b7L3/ 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入 开发一款游戏美术成本是极其高昂的,以我们常见的宣传片CG为例,动辄就要成百上千万的价格,因此这种美术物料一般只

    2024年02月11日
    浏览(42)
  • Pyecharts绘制3D散点图:把一个图做精细,就能学到好多啦

    版本:2.0.4 官方文档:pyecharts - A Python Echarts Plotting Library built with love.  在如下的设置中,X轴(width)和Y轴(depth)长度相同,Z轴要略矮一点 方法一: 可以将每个样本点的数据设置为4维,前3个维度对应X-Y-Z坐标,第4个维度对应类别,然后通过全局配置项中的视觉映射配置项,t

    2024年01月16日
    浏览(37)
  • JAVA 两个通用安全模块的设计与开发(论文+源码)_Nueve

    摘  要 本文详细介绍了基于口令的身份认证与文件安全传输两个通用安全模块的设计原理和实现过程,分析了当前口令保存的安全性,提出了运用MD5算法等对口令进行处理,并将处理结果保存在数据库中的方法。同时为了进一步增强认证系统的灵活度,设计了用户注册时的口

    2024年02月04日
    浏览(31)
  • 【学到一个新名词】String interning(字符串驻留/字符串内部化)

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在阅读 VictoriaMetrics v1.95.1 的命令行手册的时候,发现这样一段: 什么是 String interning 呢?我通过了 wiki 链接学习了一下。 并且,我还找到了一个使用 String interning 技术

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包