C++Primer第五版12.1.5節練習

2554 ワード

練習12.16:uniqueをコピーまたは付与しようとした場合ptr,コンパイラは必ずしも理解しやすいエラー情報を与えることができない.このようなエラーを含むプログラムを作成し、コンパイラがこのエラーをどのように診断するかを観察します.
エラーコードは以下の通りです.
#include 
#include 

using namespace std;

int main()
{
    unique_ptr<int> p(new int(10));
    unique_ptr<int> p1(p);//  
    unique_ptr<int> p2;
    p2 = p;               //  
    return 0;
} 
// 
[Error] use of deleted function 'std::unique_ptr<_tp _dp="">::unique_ptr(const 

std::unique_ptr<_tp _dp="">&) [with _Tp = int; _Dp = 

std::default_delete]'

練習12.17:次のunique_ptr宣言の中で、どれが合法的で、どれが後続のプログラムエラーを引き起こす可能性がありますか?各エラーの問題がどこにあるかを説明します.
int ix = 1024, *pi = &ix, *pi2 = new int(2048);
typedef unique_ptr<int> IntP;
(a) IntP p0(ix);   //   , 
(b) IntP p1(pi);   //  p1 pi2
(c) IntP p2(pi2);  //  p2 pi2
(d) IntP p3(&ix);  //  p3 ix 
(e) IntP p4(new int(2048)); //  
(f) IntP p5(p2.get()); // 

練習12.18:shared_ptrはなぜreleaseメンバーがいないのですか?
releaseはスマートポインタとポインタを分離し、使用後は単独deleteでポインタを解放する必要があります.現在のshared_ptr、releaseと呼ばない