今天在研究某开源事例代码时发现有人用default和delete关键字,在此学习了下,写了个小例子。

default和delete只能作用于构造函数和析构函数。

default关键字写了后会自动生成某些代码,比如作用在拷贝构造函数上。

delete说明静止调用,当写到析构函数上会直接编译不过去的(在栈区创建对象),当在堆区创建时能编译通过,但不能delete。

如下事例程序!

项目结构如下:

源码如下:

TestClass.h

#ifndef TESTCLASS_H
#define TESTCLASS_H#include <QString>
#include <QDebug>class TestClass
{
public:TestClass() = delete;TestClass(int intValue, QString stringValue);TestClass(TestClass &test) = default;
//    ~TestClass() = delete;int getIntValue();QString getStringValue();void setIntValue(const int &intvalue);void setStringValule(const QString &stringValue);friend QDebug operator << (QDebug os, TestClass test){os << "(" << test.m_intValue << ", "<< test.m_stringValue << ")";return os;}private:int m_intValue;QString m_stringValue;
};#endif // TESTCLASS_H

main.cpp

#include <QCoreApplication>
#include <TestClass.h>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);TestClass test2(1, "Hello World");TestClass test(test2);qDebug() << test;//    TestClass *test3 = new TestClass(10, "hello");
//    delete test3;return a.exec();
}

TestClass.cpp

#include "TestClass.h"
#include <QDebug>//TestClass::TestClass()
//{
//    qDebug() << "TestClass()";
//}TestClass::TestClass(int intValue, QString stringValue)
{this->m_intValue = intValue;this->m_stringValue = stringValue;
}//TestClass::TestClass(TestClass &test)
//{
//    this->m_intValue = test.getIntValue();
//    this->m_stringValue = test.getStringValue();
//}int TestClass::getIntValue()
{return this->m_intValue;
}QString TestClass::getStringValue()
{return this->m_stringValue;
}void TestClass::setIntValue(const int &intvalue)
{this->m_intValue = intvalue;
}void TestClass::setStringValule(const QString &stringValue)
{this->m_stringValue = stringValue;
}

程序运行截图如下:

这里如果直接搞不带参的构造对象,会直接编译不通过,这样可以防止隐式转换。

这里通过default自动创建了拷贝构造函数。

源码下载地址:

https://github.com/fengfanchen/CAndCPP/tree/master/ConstructionDemo

C++笔记-C++11中default及delete的使用相关推荐

  1. C/C++基础进阶篇:C++11 中引入的 delete 描述符使用场景

    C++11 中引入的 delete 描述符主要有如下两个使用场景: 禁止编译器自动生成拷贝 Effective C++中提到 通过"私有化 + 只声明.不定义" 的方法禁止编译器生 ...

  2. C++11中default的使用

    在C+11中,对于defaulted函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量. C++的类有四类特殊成员函数,它们分别是:默认构造函 ...

  3. C++11中= delete;的使用

    C++11中,对于deleted函数,编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性. 对于 C++ 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成 ...

  4. Android菜鸟的成长笔记(11)——Android中的事件处理

    原文: [置顶] Android菜鸟的成长笔记(11)--Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调 ...

  5. C++11学习 新特性之 “=default” 、“=delete”

    文章目录 1. =default 和=delete 概述 2. 类与默认函数 3. 使用"=delete"来限制函数生成 4. "=default"使用范围 1 ...

  6. C++——C++11中的defalut和delete关键字

    C++的类有四类特殊成员函数 (special member function),它们分别是:默认构造函数.析构函数.拷贝构造函数以及拷贝赋值运算符.这些类的特殊成员函数负责创建.初始化.销毁,或者拷 ...

  7. C++11中的delete关键字

    C++11 中,可在想要 "禁止使用" 的特殊成员函数声明后加 "= delete"(当然也可以声明为私有函数或者保护函数),而需要保留的加 "= d ...

  8. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  9. C++11中=delete的巧妙用法

    C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错. #i ...

最新文章

  1. lucene python_Python下的Lucene,PyLucene
  2. ThinkPHP5下自己写日志
  3. js实现字体和容器宽高随窗口改变
  4. post 请求 argument type mismatch_Flask-RESTful 请求解析
  5. C语言字符串、字符数组
  6. jedis 用连接池时超时返回值类型错误
  7. 管理感悟:工作管理的两大要点
  8. 关于ugui界面显示隐藏的优化
  9. 保活 进程唤醒_Android 8.0以上系统应用如何保活
  10. SQL必知必会 附录解读
  11. Delphi android 开发视频教程
  12. java编程删除文本框_Java获取和删除Word文本框中的表格
  13. c语言输出最大的数ns流程图_图8循环结构的NS流程图.ppt
  14. iPhone出现白苹果怎么修复?简单3步即可解决
  15. html用九张图片做出九宫图,用ps如何将九张照片做成九宫格?
  16. 感冒身体差的不要喝酸奶
  17. 1.2 二维三维空间向量组的线性组合
  18. 大数据分析练习-第八届泰迪杯A题-基于数据挖掘的上市公司高送转预测
  19. c语言乞丐的图片,乞丐简笔画图片
  20. 3904三极管是什么功能_光敏二极管与发光二极管有什么区别

热门文章

  1. Linux操作系统9则经典应用技巧
  2. 蚊子132 各方人员都“照顾”到位则业务会很乐观
  3. 今天一看,自己发的文章原来这么多了。openeim
  4. 一个不错的局域网聊天工具之飞鸽传书下载地址
  5. 【飞秋】位运算与组合搜索(二)
  6. 微软高级经理:Google Chrome内有部分微软的代码
  7. 每个程序员都该学习的5种开发语言,不可错过!
  8. 为什么大学普遍都教C/C++、Java,而不教Golang、Python、Rust?
  9. 给1-3年的前端 6 点诚心建议
  10. BAT的前端,不是技术牛就够了!还应该锻炼这些能力