C++笔记-C++11中default及delete的使用
今天在研究某开源事例代码时发现有人用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的使用相关推荐
- C/C++基础进阶篇:C++11 中引入的 delete 描述符使用场景
C++11 中引入的 delete 描述符主要有如下两个使用场景: 禁止编译器自动生成拷贝 Effective C++中提到 通过"私有化 + 只声明.不定义" 的方法禁止编译器生 ...
- C++11中default的使用
在C+11中,对于defaulted函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量. C++的类有四类特殊成员函数,它们分别是:默认构造函 ...
- C++11中= delete;的使用
C++11中,对于deleted函数,编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性. 对于 C++ 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成 ...
- Android菜鸟的成长笔记(11)——Android中的事件处理
原文: [置顶] Android菜鸟的成长笔记(11)--Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调 ...
- C++11学习 新特性之 “=default” 、“=delete”
文章目录 1. =default 和=delete 概述 2. 类与默认函数 3. 使用"=delete"来限制函数生成 4. "=default"使用范围 1 ...
- C++——C++11中的defalut和delete关键字
C++的类有四类特殊成员函数 (special member function),它们分别是:默认构造函数.析构函数.拷贝构造函数以及拷贝赋值运算符.这些类的特殊成员函数负责创建.初始化.销毁,或者拷 ...
- C++11中的delete关键字
C++11 中,可在想要 "禁止使用" 的特殊成员函数声明后加 "= delete"(当然也可以声明为私有函数或者保护函数),而需要保留的加 "= d ...
- FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...
- C++11中=delete的巧妙用法
C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错. #i ...
最新文章
- lucene python_Python下的Lucene,PyLucene
- ThinkPHP5下自己写日志
- js实现字体和容器宽高随窗口改变
- post 请求 argument type mismatch_Flask-RESTful 请求解析
- C语言字符串、字符数组
- jedis 用连接池时超时返回值类型错误
- 管理感悟:工作管理的两大要点
- 关于ugui界面显示隐藏的优化
- 保活 进程唤醒_Android 8.0以上系统应用如何保活
- SQL必知必会 附录解读
- Delphi android 开发视频教程
- java编程删除文本框_Java获取和删除Word文本框中的表格
- c语言输出最大的数ns流程图_图8循环结构的NS流程图.ppt
- iPhone出现白苹果怎么修复?简单3步即可解决
- html用九张图片做出九宫图,用ps如何将九张照片做成九宫格?
- 感冒身体差的不要喝酸奶
- 1.2 二维三维空间向量组的线性组合
- 大数据分析练习-第八届泰迪杯A题-基于数据挖掘的上市公司高送转预测
- c语言乞丐的图片,乞丐简笔画图片
- 3904三极管是什么功能_光敏二极管与发光二极管有什么区别