テンプレート< クラス T>
クラスSpの{
パブリック:
SP(T * PTR = nullptr):ptr_(PTR)、count_(新しいsize_tの){
場合(PTR){
* count_ = 1 。
} 他{
* count_ = 0 。
}
}
SP(CONST Spのおよび他の){
ptr_ = other.ptr_。
count_ = other.count_。
( ++ * _カウント)。
}
Spの&演算子=(CONST Spの&SRC){
場合(ptr_ == src.ptr_){
返す * この。
}
ReleaseCount()。
ptr_ = src.ptr_。
count_ = src.count_。
( ++ * _カウント)。
返す * これを。
}
size_tのはuse_count(){
戻り *のcount_。
}
T&演算子 * (){
場合(ptr_)
{
リターン* ptr_;
}
}
のT *の演算子 - > (){
場合(ptr_)
{
戻りptr_。
}
}
演算子 ブール()のconst {
戻り ptr_ =!nullptr。
}
〜SP(){
ReleaseCount()。
}
プライベート:
無効ReleaseCount(){
場合(ptr_){
( *カウント_) - 。
もし(* count_の== 0 ){
ptr_を削除します。
count_を削除します。
}
}
}
T * ptr_ {nullptr}。
size_tの * count_ {nullptr}。
}。
クラスベース
{
パブリック:
ベース(){
のprintf(" CONする\ n " );
}
〜ベース(){
のprintf(" ディーコンする\ n " );
}
}。