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

 

 

相关推荐
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 6300 多个 star,</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用,交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示,分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页