码迷,mamicode.com
首页 > 编程语言 > 详细

C++进阶--不让编译器自动生成类函数

时间:2018-12-23 19:33:04      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:计数   const   表示   end   int   his   opera   没有   保存   

//############################################################################
/*
 * 不让编译器自动生成类函数
 *
 *
 *
 * 并不是所有的类都需要编译器自动生成类函数
 *
 * 例:  一个"OpenFile" 类表示一个被打开的文件。构造函数至少需要一个文件名作为参数
 *         所有不需要默认构造函数
 */

那么如何让编译不自动生成函数
/*
 * 对于C++ 11:
 */
class dog {
   public:
   dog(const dog& ) = delete; // 直接使用delete关键字即可
                              // 当资源不可共享时将拷贝构造禁用
}


/* 对于C++ 03:
 *
1. Default constructor.      - 简单
2. Copy constructor.         - 见以下解决方法
3. Copy Assignment Operator. - 见以下解决方法


方法1:
 将其声明为private函数,但是不定义它们
 -- 对于成员和友元,会链接时错误,因为没有实现
 -- 对于其他,会编译时错误
*/
class dog {
   private:
   dog& operator=(const dog& rhs);   
};


/*
方法2:
 在基类中,将其声明为private函数,但是不定义它们
 -- 编译时错误
*/
class yellowdog : public dog {
};
int main() {
   yellowdog y1("henry");
   yellowdog  y2;
   y2 = y1;
}

// 注意:以上方法可以用于禁用任何函数


/* 问题:析构函数是否可以被禁用?使用场景?
 */

/* 方法 */
class dog {
  public:
     void destroyMe() { delete this; }
  private:
     ~dog() { cout<< m_name.m_str << " is destroyed.\n" << endl; }
};

int main ()
{
  dog* dog1 = new dog();
  dog1->destroyMe();
}


/* 使用场景: 1. 引用计数的智能指针
 *        2. 栈空间很小的嵌入式编程 //只能在堆上保存,因为如果是在栈上生成,堆栈rewind的时候肯定会调析构函数
 */

C++进阶--不让编译器自动生成类函数

标签:计数   const   表示   end   int   his   opera   没有   保存   

原文地址:https://www.cnblogs.com/logchen/p/10165145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!