美文网首页
C++学习笔记(一)

C++学习笔记(一)

作者: dev_winner | 来源:发表于2019-08-21 19:36 被阅读0次
  • newdelete运算符一次分配释放一个对象。
// new一个数组对象,数组长度size为整型
int *p = new int[size]; 
  • new T[]动态分配一个数组,会得到一个(T*)指针类型的元素
  • 初始化动态分配对象的数组
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
    cout << "5个未初始化的int元素:" << endl;
    int* p = new int[5];
    for(int i = 0; i < 5; ++i) {
        cout << p[i] << endl; // 随机值
    }
    cout << "==================" << endl;
    cout << "5个全为0的int元素:" << endl;
    int* q = new int[5]();
    for (int i = 0; i < 5; ++i)
    {
        cout << q[i] << endl;
    }
    cout << "================" << endl;
    cout << "5个空string元素:" << endl;
    string* ps = new string[5]; 
    // 由于ps是指针对象,会默认调用string类的构造函数进行初始化
    for (int i = 0; i < 5; ++i)
    {
        cout << ps[i] << endl;
    }
    cout << "5个空string元素:" << endl;
    string* qs = new string[5]();
    for (int i = 0; i < 5; ++i)
    {
        cout << qs[i] << endl;
    }
    return 0;
}
执行结果
  • 从实践结果来看,new一个数组且后面没有添加圆括号,若不是创建一个类对象数组,其数组中元素值是一些随机值。而实际应用中我们需要对其初始化,方法是在方括号之后加一对空括号

  • 在C++11中,可提供一个元素初始化器的花括号列表,如:

int* p = new int[5]{0, 1, 2, 3, 4};
string* ws = new string[5]{"a", "b", "c"};  
  • 若列表中的个数小于实际元素数目,剩余的值进行值初始化。
  • 若列表中的个数大于实际元素数目,则new失败,不会分配任何内存。
  • 释放一个类对象或动态数组
delete p;    //p必须指向一个动态分配的对象地址(或空)
delete [] p;    //p必须指向一个动态分配的数组首地址(或空)
  • 若在delete一个指向数组的指针时忽略了方括号(或在delete一个指向单一对象的指针时使用了方括号),其行为是未定义的
  • 数组中的元素按逆序销毁

相关文章

网友评论

      本文标题:C++学习笔记(一)

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