zoukankan      html  css  js  c++  java
  • Effective C++ .06 阻止编译器自动生成函数以及被他人调用

    这节讲了下如何防止对象拷贝(隐藏并不能被其他人调用)

    两种方法:

    1. 将拷贝构造函数声明为private 并且声明函数但不进行定义

    #include <iostream>
    #include <cstdlib>
    
    class Dummy {
    public:
        Dummy(int d = 0) : data(d) {}
        Dummy* getCopy() {
            Dummy* x = new Dummy(*this);
            return x;
        }
    private:
        int data;
        Dummy(const Dummy& org);
    };
    
    int main() {
    
        Dummy d(1);
    
        // will case link error
        d.getCopy();
    
        // will case compile error
        Dummy d2(d);
        
        return 0;
    }

    不进行定义是防止被内部的函数调用,这样就会在链接的时候报错。

    2. 继承一个拷贝构造函数和copy assignment函数为private的类,如05所述,默认的拷贝函数会调用父类和成员的对应拷贝函数,如果这个函数不能执行那么函数就无法被生成了

    class Uncopyable {
    public:
        Uncopyable(){};
    private:
        Uncopyable(const Uncopyable&);
        Uncopyable& operator=(const Uncopyable&);
    
    };
    
    class Fake: public Uncopyable {
    private:
        int data;
    public:
        Fake(int d): data(d){};
    };
    
        Fake f(1);
        Fake f2(f);

    [Note] 'Fake::Fake(const Fake&)' is implicitly deleted because the default definition would be ill-formed:

    [Error] 'Uncopyable::Uncopyable(const Uncopyable&)' is private

    这里也只能阻止默认拷贝

  • 相关阅读:
    记一次百度面试题
    深度拷贝对象
    spring boot 学习笔记
    mac Zip 常用命令
    Mac OS 终端下使用 Curl 命令下载文件
    懒人必备的移动端定宽网页适配方案
    前端面试题之 sum(2)(3) (链式调用,toString,柯里化,数组操作)
    web上的复制
    fileupload上传文件时带参数
    Mac下Nginx环境配置
  • 原文地址:https://www.cnblogs.com/lailailai/p/4176666.html
Copyright © 2011-2022 走看看