C++Primer第五版12.1.5節練習
2554 ワード
練習12.16:uniqueをコピーまたは付与しようとした場合ptr,コンパイラは必ずしも理解しやすいエラー情報を与えることができない.このようなエラーを含むプログラムを作成し、コンパイラがこのエラーをどのように診断するかを観察します.
エラーコードは以下の通りです.
練習12.17:次のunique_ptr宣言の中で、どれが合法的で、どれが後続のプログラムエラーを引き起こす可能性がありますか?各エラーの問題がどこにあるかを説明します.
練習12.18:shared_ptrはなぜreleaseメンバーがいないのですか?
releaseはスマートポインタとポインタを分離し、使用後は単独deleteでポインタを解放する必要があります.現在のshared_ptr、releaseと呼ばない
エラーコードは以下の通りです.
#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と呼ばない