C++スマートポインタshared_ptr使用例

2713 ワード

new/deleteに苦しめられてから、スマートポインタがどれだけ使いやすいかを実感することができます.
インテリジェントポインタは、ポインタを管理するためのクラスです.ここでshared_ptrは、複数の場所で使用される可能性のあるポインタを専門に管理するクラスです.
C++11のスマートポインタのヘッダファイルは次のとおりです.
#include 

shared_ptrは何の役に立つの?
newとdeleteは一つ一つ対応する必要があることを知っています.しかし、うっかりポインタを「あちこちに散らす」と誘惑するケースが多すぎる.これで基本的にnewとdeleteは一つ一つ対応できない運命にある.あるいはdeleteがなく、メモリが漏洩した.または、複数の場所でdeleteが発生し、重複解放(一般的に「セグメントエラー」、「bad access」など)が発生します.皮肉なことに、ポインタを散らすのは「メモリを節約するため」かもしれません(重複したオブジェクトの作成を避けるため)
shared_ptrはこの問題を解決するためです:1塊の空間の大きい家庭用、誰も使っていないで釈放します.
shared_ptrはこの空間の「執事」に相当し、みんながこの空間を使うことができ、この空間を使い終わった後に解放するかどうかを考える必要はありません.なぜなら、誰もこの空間を使っていないとき、「執事」はこの空間を解放するからだ.
shared_ptrはどう使いますか.
針はどうやって使いますか.
1int* a = new int(1);
2, int* func(int* b){}

コードから見ると、2つの置換を行うだけです.
shared_ptr<int>”  “int*”
“make_shared<int>”  “new int

そして一般的にポインタを使うように操作することができます.
上記の「2箇所置換」コードの例は次のとおりです.
std::shared_ptr CreateConeShape() {

    /*       */
    return std::make_shared(o2w, w2o, reverseOrientation, height, radius, phimax);
}
shared_ptr<Grid> Robot = make_shared<Grid>(make_shared<Mesh>());
inline void
FM_SV_GlossySpecular::set_cs(shared_ptr<Texture> t_ptr) {
    cs = t_ptr;
}

参照リンク:1、(基本)https://blog.csdn.net/qq_35116353/article/details/689574142,(犯しやすいミス)http://www.cnblogs.com/heleifz/p/shared-principle-application.html