CPP04
1.0
読み取り中…
検索中…
一致する文字列を見つけられません
ScopedPointer.hpp
[詳解]
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* ScopedPointer.hpp :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: kamitsui <kamitsui@student.42tokyo.jp> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2025/06/03 20:23:36 by kamitsui #+# #+# */
9
/* Updated: 2025/06/03 20:56:25 by kamitsui ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
17
#ifndef SCOPED_POINTER_HPP
18
#define SCOPED_POINTER_HPP
19
20
#include <
iostream
>
// デバッグ出力用
21
22
// テンプレートクラスとして定義
23
template
<
typename
T>
class
ScopedPointer
{
24
private
:
25
T *m_ptr;
// 管理する生ポインタ
26
27
// コピーコンストラクタとコピー代入演算子を禁止
28
// これにより、所有権のコピーを防ぎ、二重解放を回避する
29
ScopedPointer
(
const
ScopedPointer
&);
30
ScopedPointer
&operator=(
const
ScopedPointer
&);
31
32
public
:
33
// コンストラクタ: 生ポインタを受け取り、所有権を持つ
34
explicit
ScopedPointer
(T *ptr = 0) : m_ptr(ptr) {
35
std::cout
<<
"ScopedPointer("
<< m_ptr <<
") created."
<<
std::endl
;
// デバッグ用
36
}
37
38
// デストラクタ: スコープを抜けるときに管理下のメモリを解放
39
~ScopedPointer
() {
40
std::cout
<<
"ScopedPointer("
<< m_ptr <<
") destroyed. Deleting resource."
<<
std::endl
;
// デバッグ用
41
delete
m_ptr;
42
}
43
44
// 生ポインタへのアクセスを提供する
45
T *
get
()
const
{
return
m_ptr; }
46
47
// ポインタのように Dereference 演算子 (*) をオーバーロード
48
T &
operator*
()
const
{
49
// null ポインタの場合は未定義動作になるが、通常は呼び出し側でチェック
50
return
*m_ptr;
51
}
52
53
// ポインタのように Member Access 演算子 (->) をオーバーロード
54
T *
operator->
()
const
{
55
// null ポインタの場合は未定義動作になるが、通常は呼び出し側でチェック
56
return
m_ptr;
57
}
58
59
// 所有権を解放し、生ポインタを返す
60
// ポインタを受け取った側が解放の責任を持つ
61
T *
release
() {
62
T *temp = m_ptr;
63
m_ptr = 0;
// null にする (デストラクタで delete しないように)
64
return
temp;
65
}
66
67
// 新しいポインタを割り当て直す(以前のポインタは解放される)
68
void
reset
(T *ptr = 0) {
69
if
(m_ptr != ptr) {
// 同じポインタでないかチェック
70
delete
m_ptr;
71
m_ptr = ptr;
72
}
73
}
74
};
75
76
#endif
// SCOPED_POINTER_HPP
ScopedPointer
Definition
ScopedPointer.hpp:23
ScopedPointer::release
T * release()
Definition
ScopedPointer.hpp:61
ScopedPointer::reset
void reset(T *ptr=0)
Definition
ScopedPointer.hpp:68
ScopedPointer::get
T * get() const
Definition
ScopedPointer.hpp:45
ScopedPointer::operator->
T * operator->() const
Definition
ScopedPointer.hpp:54
ScopedPointer::operator*
T & operator*() const
Definition
ScopedPointer.hpp:48
ScopedPointer::ScopedPointer
ScopedPointer(T *ptr=0)
Definition
ScopedPointer.hpp:34
ScopedPointer::~ScopedPointer
~ScopedPointer()
Definition
ScopedPointer.hpp:39
std::cout
std::endl
T endl(T... args)
iostream
ex00
ScopedPointer.hpp
構築:
1.9.8