iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
自我挑戰組

少年DevOps的C++奇怪漂流系列 第 30

Day30: auto_ptr

常用的程式設計習慣是動態配置記憶體就是將某記憶體位置丟給指標後當在不需使用時才用delete手動回收,但如果在這之前發生例外,就會產生記憶體洩漏(Memory leak)。C++標準函式庫中有提供樣板auto_ptr處理這種狀況,

// Fig. 16.10: Fig16_10.cpp
// Demonstrating auto_ptr.
#include <iostream>
using std::cout;
using std::endl;

#include <memory>
using std::auto_ptr; // auto_ptr class definition

#include "Integer.h"

// use auto_ptr to manipulate Integer object
int main()
{
   cout << "Creating an auto_ptr object that points to an Integer\n";

   // "aim" auto_ptr at Integer object
   auto_ptr< Integer > ptrToInteger( new Integer( 7 ) );

   cout << "\nUsing the auto_ptr to manipulate the Integer\n";
   ptrToInteger->setInteger( 99 ); // use auto_ptr to set Integer value

   // use auto_ptr to get Integer value
   cout << "Integer after setInteger: " << ( *ptrToInteger ).getInteger()
      << "\n\nTerminating program" << endl;
   return 0;
}  // end main

auto_ptr< Integer > ptrToInteger( new Integer( 7 ) );
// ptrToInteger是個auto_ptr< Integer >的樣板指標指向Integer物件,一開始透過建構子初始化值為7
ptrToInteger->setInteger( 99 );
//這邊是透過auto_ptr操作Integer的setInteger()方法故使用->箭頭符號
( ptrToInteger ).getInteger()
//神奇操作來了,對指標auto_ptr進行
運算(取值運算)取回了Integer物件故這裡是用.(dot)

// *取值運算
// & 取址運算

Integer的原始碼請參考: day30_example https://gitlab.com/Ted_Griffin771/cpp-book-report/-/tree/master/examples/day30_example


上一篇
Day29
系列文
少年DevOps的C++奇怪漂流30

尚未有邦友留言

立即登入留言