欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié)

 更新時(shí)間:2024年07月11日 08:35:32   作者:heeheeai  
本文主要介紹了c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

c++棧內(nèi)存和堆內(nèi)存的基本使用

#include <iostream>

// 定義一個(gè)簡(jiǎn)單的結(jié)構(gòu)體
struct Person {
  std::string name;
  int age;
};

int main() {
  // 棧內(nèi)存分配
  int a = 10; // 基本數(shù)據(jù)類型的棧內(nèi)存分配
  Person person; // 結(jié)構(gòu)體的棧內(nèi)存分配
  person.name = "John";
  person.age = 30;

  std::cout << "Stack memory usage:" << std::endl;
  std::cout << "a = " << a << std::endl;
  std::cout << "Person name: " << person.name << ", age: " << person.age << std::endl;

  // 堆內(nèi)存分配
  int* p = new int; // 基本數(shù)據(jù)類型的堆內(nèi)存分配
  *p = 20;

  Person* personPtr = new Person; // 結(jié)構(gòu)體的堆內(nèi)存分配
  personPtr->name = "Alice";
  personPtr->age = 25;

  std::cout << "Heap memory usage:" << std::endl;
  std::cout << "*p = " << *p << std::endl;
  std::cout << "PersonPtr name: " << personPtr->name << ", age: " << personPtr->age << std::endl;

  // 釋放堆內(nèi)存
  delete p;
  delete personPtr;

  return 0;
}

動(dòng)態(tài)數(shù)組的使用和內(nèi)存管理

#include <iostream>

int main() {
  // 動(dòng)態(tài)數(shù)組的堆內(nèi)存分配
  int size = 5;
  int* array = new int[size];

  // 初始化數(shù)組
  for (int i = 0; i < size; ++i) {
    array[i] = i * 10;
  }

  // 打印數(shù)組
  std::cout << "Dynamic array:" << std::endl;
  for (int i = 0; i < size; ++i) {
    std::cout << "array[" << i << "] = " << array[i] << std::endl;
  }

  // 釋放堆內(nèi)存
  delete[] array;

  return 0;
}

內(nèi)存泄漏示例及其解決方案

#include <iostream>

void memoryLeakExample() {
  int* leakArray = new int[100]; // 這個(gè)數(shù)組沒(méi)有被釋放,造成內(nèi)存泄漏

  // 正確的處理方式
  delete[] leakArray;
}

int main() {
  // 調(diào)用內(nèi)存泄漏示例
  memoryLeakExample();

  return 0;
}

智能指針的使用

C++11引入了智能指針,可以自動(dòng)管理內(nèi)存,避免內(nèi)存泄漏。

#include <iostream>
#include <memory> // 需要包含這個(gè)頭文件

class MyClass {
public:
  MyClass() {
    std::cout << "Constructor called" << std::endl;
  }
  ~MyClass() {
    std::cout << "Destructor called" << std::endl;
  }
  void display() {
    std::cout << "Display method called" << std::endl;
  }
};

int main() {
  // 使用unique_ptr
  std::unique_ptr<MyClass> ptr1(new MyClass());
  ptr1->display();

  // 使用shared_ptr
  std::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>();
  ptr2->display();

  return 0;
}

到此這篇關(guān)于c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié)的文章就介紹到這了,更多相關(guān)c++棧內(nèi)存和堆內(nèi)存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論