[過去ログ] C++相談室 part165 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
774
(1): デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/22(土) 22:33:09.97 ID:kbZO019Z0(2/4) AAS
>>773
773(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/22(土) 21:29:46.22 ID:nNEN9uWE0(2/3) AAS
>>772
T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと?
特に問題ないよ。

ところでテンプレートクラスじゃなくてクラステンプレートな!
㌧クス、

>T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと?
>特に問題ないよ。
それがTのコンストラクタがprivateなパティーンなのです!
friendにしないとビルドが通らないかった(VS2022、VS2015)。
多分moveとかの最にstd::unique_ptr<T>がTのコンストラクタにアクセスするのだと思う。
777
(2): デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/22(土) 23:48:30.44 ID:kbZO019Z0(4/4) AAS
>>776
776(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/22(土) 23:40:24.86 ID:nNEN9uWE0(3/3) AAS
>>775
new Foo() を Foo のメンバ関数の中でやる分には自分自身の中でやることなので friend 宣言は不要。
std::make_unique<Foo>() をすると std::make_unique の中で Foo のコンストラクタを呼ぼうとするから std::make_unique<Foo> をフレンド宣言する必要がある。
>new Foo() を Foo のメンバ関数の中でやる分には自分自身の中でやることなので friend 宣言は不要。
と思うじゃん?
↓現実
>friendにしないとビルドが通らないかった(VS2022、VS2015)。(>>774

エラーメッセージは熟読していませんぬが、
多分クラステンプレートの実体化がクラスのメソッド全部についてまとめて行われる的なことが起きて、
Tのコンストラクタにアクセスするstd::unique_ptr<T>のメンバ関数(moveコンストラクタとか)が引っかかるのだと予想
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.030s