美文网首页C++
C++ 复习笔记 (之二)

C++ 复习笔记 (之二)

作者: 芒鞋儿 | 来源:发表于2018-09-10 14:54 被阅读25次

(7)size_t:
size_t 虽然在标准C中定义,但实际使用中一直是一个不太容易灵活应用的内容。
size_t类型是一个类型定义,通常将一些无符号的整形定义为size_t,比如说unsigned int或者unsigned long,甚至unsigned long long。

参看这篇文章:
why size_t matters

一般提到size_t 都说提高代码的可移植性, 有效性和可读性,(主要是可移植性)

在大部分机器上,unsigned int的最大值要比int的最大值大两倍,比如说再也给16位的机器上,unsigned int的最大值为65535,int的最大值为32767。
int在大部分机器上可以移行,但例如在摩托罗拉IP16L32平台上并非如此,(详细省略)
size_t类型是一个类型定义,通常将一些无符号的整形定义为size_t,比如说unsigned int或者unsigned long,甚至unsigned long long。
常用例子:

void *memcpy(void *s1, void const *s2, size_t n);
size_t strlen(char const *s);
void *malloc(size_t n);

size_t的定义在<stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>和<wchar.h>这些标准C头文件中,

(8)智能指针:

为何需要智能指针?
内存管理是常见错误和Bug来源,很多BUG来自动态内存分配和指针的使用。
广泛使用动态内存分配(使用容器等)后,很容易忘记每个指针只在正确时间执行一次delete 操作。出错的后果是多次释放动态分配的内存时,有可能会导致内存损坏或者致命的运行时错误,而当忘记释放动态内存分配,则会导致内存泄漏。
智能指针可以帮助管理动态内存的分配,避免内存泄漏。

auto_ptr: 废妃

unique_ptr:
🌰

void notLeaky()
{
      auto mySimpleSmartPtr = make_unique<Simple>();
      mySimpleSmartPtr->go();
}

如果编译器不支持make_unique(),则采用:
🌰

unique_ptr<Simple> mySimpleSmartPtr(new Simple());

shared_ptr:
用make_shared()创建🌰

auto mySimpleSmartPtr = make_shared<Simple>();

带有自动释放功能

int main()
{
    shared_ptr<int> myIntSmartPtr(malloc_int(42),free);
    return 0;
}

一个用于文件操作的🌰

void CloseFile(FILE* filePtr)
{
    if (filePtr == nullptr)
          return;
    fclose(filePtr);
    cout << "closed" << endl;
}
int main()
{
    FILE* f = fopen("data.txt", "w");
     shared_ptr<FILE> filePTr(f, CloseFile);
    // 以下省略
    //......
    return 0;
}

其他还有weak_ptr, Nothing 引用计数

**实用上讲,shared_ptr 对于指针的释放操作比较方便.

(9)常见内存陷阱:
-分配不足的字符串
-访问内存越界
-内存泄漏
-双重删除、无效指针
**内存另外开辟专题文章

相关文章

  • C++ 复习笔记 (之二)

    (7)size_t:size_t 虽然在标准C中定义,但实际使用中一直是一个不太容易灵活应用的内容。size_t类...

  • 2018-11-01

    增加淘宝店宝贝 英语趣配音 日常口语对话 课程复习预习整理笔记 练习编程 复习高数线代 复习数据结构 学习c++ ...

  • C++ Primer Plus第6版18个重点笔记

    下面是我看《C++ Primer Plus》第6版这本书后所做的笔记,作为备忘录便于以后复习。 笔记部分### C...

  • C++:复习笔记3

    conversion function non-explicit-one-argument ctor 如果如下写就...

  • C++:复习笔记1

    guard防卫试声明 inline关键字 1、写到head里面,class内部的小函数可能是inline方式2、可...

  • NDK | C++ 复习笔记

    前置知识 这篇文章的内容会涉及以下前置 / 相关知识,贴心的我都帮你准备好了,请享用~ 《NDK | C 语言复习...

  • C++:复习笔记2

    static 类成员元素多个object只有一份数据 static 类成员函数静态函数没有this指针,只用于访问...

  • 【C++温故知新】指针

    这是C++类重新复习学习笔记的第 二 篇,同专题的其他文章可以移步:https://www.jianshu.com...

  • 【C++温故知新】循环与分支

    这是C++类重新复习学习笔记的第 三 篇,同专题的其他文章可以移步:https://www.jianshu.com...

  • 【C++温故知新】函数

    这是C++类重新复习学习笔记的第 四 篇,同专题的其他文章可以移步:https://www.jianshu.com...

网友评论

    本文标题:C++ 复习笔记 (之二)

    本文链接:https://www.haomeiwen.com/subject/cqgjgftx.html