[過去ログ] C++相談室 part164 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
240: (ワッチョイ 8101-1tDD) 2023/06/18(日)21:48 ID:VwYqKwPk0(2/4) AAS
>>239
レス有難うございます
まず訂正
-accumulate
+std::accumulate
全部は貼れないですけど大事そうなところ

In file included from /usr/include/c++/12/numeric:62,
省5
241
(1): (ワッチョイ 9e81-L1I+) 2023/06/18(日)23:15 ID:w3/xAOT+0(1) AAS
ADLでoperator+が見つからないからかな?
struct Vector : std::array <double, 3> {};
みたいに定義したらいけるのでは
242
(1): (ワッチョイ 8101-1tDD) 2023/06/18(日)23:20 ID:VwYqKwPk0(3/4) AAS
>>241
>struct Vector : std::array <double, 3> {};
>みたいに定義したらいけるのでは
通りますね
どういうこと?
243
(1): (ワッチョイ 32fb-9xvA) 2023/06/18(日)23:24 ID:bX3uBTIT0(1/2) AAS
std::accumulateが14行目で定義したoperator+を見つけれてないのが原因っぽい。

std::accumulateの第4引数に
[](const Vector& v1, const Vector& v2){ return v1+v2;}
を追加してやるとコンパイルは通る。

14行目のoperator+をstd名前空間に入れてやれば動くにゃ動くけど色々マズいので(調査する分にはいいけど)最終的な解答にはならないかな
244
(1): (ワッチョイ 32fb-9xvA) 2023/06/18(日)23:29 ID:bX3uBTIT0(2/2) AAS
>>242
たぶんC++コンパイラはoperator+の候補を検索するときに
Vector( = std::array<double, 3>)と同じ名前空間にあるものしか検索しない

Vectorのクラス定義そのものがグローバル名前空間にあるなら14行目のoperator+を見つけられるけど、
今はVectorの正体はstd::array<...>なのでstd名前空間しか検索しないんだと思う
245
(1): (ワッチョイ 8101-1tDD) 2023/06/18(日)23:39 ID:VwYqKwPk0(4/4) AAS
>>243,244
なるほど解説頂きまして有難うございます
グローバルスコープはどっからでも見えて良さそうなものの
何でグローバルスコープの関数を探さないですかね?
246
(1): (ワッチョイ a901-UvLK) 2023/06/18(日)23:48 ID:EGGkT3O00(1) AAS
独自のメンバ変数を持たないのなら継承してしまうのも手ではある(ただしコンストラクタやarrayを受け取るキャスト用コンストラクタとか書く必要が出ると思うけど)
ただ、そもそもカスタマイズしたり自分の用途に本当に使いやすいものを作りたいなら、ちゃんと自分で全部書いた方がいいと思うよ
247
(1): (ワッチョイ b110-lSMs) 2023/06/19(月)00:42 ID:2lgIrH6A0(1) AAS
>>245
std::accumlateの定義内からだと、その下の方(ユーザーコード)で定義されてるoperator+は見えてないので、グローバル名前空間の探索では見つからない
248
(1): (ワッチョイ 8101-1tDD) 2023/06/19(月)00:52 ID:Q4g6N6uX0(1/3) AAS
>>247
std::accumlateが定義されているnumericをincludeする前に
以下のようにグローバルスコープにプロトタイプを置いても
同じようにoperator+が見えてないとエラーが出ます
using Vector = std::array <double, 3>;
Vector operator + (const Vector &lhs, const Vector &rhs);
#include <numeric>
249
(1): (ワッチョイ a901-UvLK) 2023/06/19(月)03:40 ID:RYn53SnN0(1/2) AAS
accumlateは関数テンプレートだから実体化される時点でoperator+が見えてりゃOKのはず
言われてる通りADLで対象外なのが問題
250
(1): (ワッチョイ 256b-trtU) 2023/06/19(月)05:38 ID:JAsvvATP0(1) AAS
>>237
(スマート)ポインタで持って要らなくなったら明示的にリリースする方法はあらゆるコンテナに対して使えるよね?笑
251
(1): (ワッチョイ f59c-Axrn) 2023/06/19(月)08:48 ID:KLBRX38t0(1) AAS
>>250
>>223
252: (ワッチョイ 8101-1tDD) 2023/06/19(月)09:20 ID:Q4g6N6uX0(2/3) AAS
>>249
有難うございます
グローバルスコープに定義した関数が見えないのは
どうしてなんでしょうかね?
それでは全然グローバルじゃないような気がするのですが
規格を決めるときに何か意図があったのでしょうかね?
253
(1): (ワッチョイ a901-UvLK) 2023/06/19(月)10:39 ID:RYn53SnN0(2/2) AAS
そもそもが名前空間内(よその演算子と混ざらないように)にある演算子オーバーロードを、外部からでも引数が合えば使えるように(std::operator+(a, b)とか書かないでいいように)するためのルールらしいから
外部の演算子見に行くのは目的に合わんのじゃね

std名前空間内のarrayに外部から勝手に動作を追加しようとしてるんだから、あまりよろしくないやり方しようとしてると考えた方がいい
(だから>>246のように書いた、継承したら一応arrayではなくちゃんとVectorクラスに対する演算子だから通る)
254: (ワッチョイ 8101-1tDD) 2023/06/19(月)11:53 ID:Q4g6N6uX0(3/3) AAS
>>253
>std名前空間内のarrayに外部から勝手に動作を追加しようとしてるんだから、
>あまりよろしくないやり方しようとしてると考えた方がいい
なるほど
たぶんこういう考え方なんでしょうね
255: (ワッチョイ 5efb-+wmN) 2023/06/19(月)12:20 ID:4PINPeBN0(1) AAS
つまりvector<int>を使いなさいということ
256: (ワッチョイ 7d9b-trtU) 2023/06/19(月)12:21 ID:wGtx/iKL0(1) AAS
>>251
安価ミス
257: (アウアウウー Sacd-9XmN) 2023/06/20(火)00:04 ID:YSi65ASja(1) AAS
実引数依存の名前探索、Argument-Dependent Lookup (ADL)は、
Koenig lookup とも言う

「Cプログラミングの落とし穴」の著者、
Koenigが、C++ に入れる事を推奨した

ADLを知っているなら、かなりのプロと言える
258: (ワッチョイ 8101-1tDD) 2023/06/20(火)00:18 ID:vGfe0Eju0(1/7) AAS
勉強になります
259: (アウアウウー Sacd-9XmN) 2023/06/20(火)02:12 ID:1vctBLGTa(1) AAS
演算子のオーバーロードなら、フレンド関数とか?

非メンバの演算子オーバーロード | Programming Place Plus C++編【言語解説】 第35章

外部リンク[html]:programming-place.net
260
(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)10:05 ID:IIzrqfbq0(1/5) AAS
状況を簡略化するとこう。

namespace ns {
struct foo {};
template <class T>
void bar(const T&) {
T() + T();
} };
省15
261
(1): (ワッチョイ 8101-1tDD) 2023/06/20(火)10:53 ID:vGfe0Eju0(2/7) AAS
>>260
>だから順序を変えれば通る。
最近手元のg++を更新しまして10.2.1 -> 12.2.0になったんですが
前者のケースが通らなくなりまして疑問に思っていたところでした
10.2.1は寛容で両方とも通るけどC++的には後者のみ通るのが正しい?
262: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)11:41 ID:IIzrqfbq0(2/5) AAS
>>261
前者はたぶん未定義かつ診断不要な状況なのでエラーを検出せずに通すのも正しい挙動で
プログラマがそういう状況を作ってしまうのが仕様に反する (というか結果が保証されない) という解釈になると思う。
263: (ワッチョイ 8101-1tDD) 2023/06/20(火)13:36 ID:vGfe0Eju0(3/7) AAS
なるほどー
有難うございます
264
(2): (JP 0H91-FhUT) 2023/06/20(火)21:39 ID:Pk8V/jejH(1/4) AAS
template<typename Callback>
void func(Callback cb)
{
//cb(1); // A
//cb(1,2);// B
}

void f1(int){}
省4
265: (ワッチョイ 515f-9XmN) 2023/06/20(火)22:18 ID:Cuq1USIJ0(1) AAS
is_invocableでおk
266
(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)22:21 ID:IIzrqfbq0(3/5) AAS
>>264
渡されたコールバック関数の引数の数によって区別するってこと?
素朴な方法だとオーバーロードするのが手っ取り早いと思う。

void func(void (*cb)(int)) {
cb(1);
}

void func(void (*cb)(int, int)) {
省8
267: (ワッチョイ 8101-1tDD) 2023/06/20(火)22:27 ID:vGfe0Eju0(4/7) AAS
>>264
template<typename Callback> void func(Callback cb);
template <> void func(void (*cb) (int))
{
(*cb)(1); // A
}
template <> void func(void (*cb) (int, int))
省6
268: (ワッチョイ 8101-1tDD) 2023/06/20(火)22:29 ID:vGfe0Eju0(5/7) AAS
templateが意味ないね
269
(4): (ワッチョイ 127f-L1I+) 2023/06/20(火)22:39 ID:ui/rWsWf0(1) AAS
265が言うようにis_invocable使うとこんな感じ?

template<typename Callback>
void func(Callback cb)
{
if constexpr (std::is_invocable_v<Callback, int>) {
cb(1);
} else if constexpr (std::is_invocable_v<Callback, int, int>) {
省3
270
(1): (ワッチョイ 8101-1tDD) 2023/06/20(火)22:41 ID:vGfe0Eju0(6/7) AAS
>>269
これって関係ないif節はコンパイル時に消えるの?
271
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)22:43 ID:IIzrqfbq0(4/5) AAS
>>270
消えるよ。
272
(1): (JP 0H91-FhUT) 2023/06/20(火)22:44 ID:Pk8V/jejH(2/4) AAS
>>269
ありがとうございます。
gcc 13.1.0 でc++17でうまくいきました。

後出しで申し訳ありませんが、C++14でかけませんか?
273
(1): (ワッチョイ 8101-1tDD) 2023/06/20(火)22:47 ID:vGfe0Eju0(7/7) AAS
>>269,271
これは知らんかった
勉強になるなぁ
274
(1): (JP 0H91-FhUT) 2023/06/20(火)22:48 ID:Pk8V/jejH(3/4) AAS
>>269
まさにこれをやりたかったです。

template<typename Callback>
void func(Callback cb)
{
// こことか

if constexpr (std::is_invocable_v<Callback, int>) {
省6
275
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)22:59 ID:IIzrqfbq0(5/5) AAS
>>272 >>274
ひとつの関数テンプレート中でやりたいってこと?
if constexpr が導入される前だとオーバーロードなり特殊化なりで
別の関数として分離しないと書けないと思う。

is_invocable に相当するものは自分で書こうと思えば書けるが
if constexpr は言語のコアの機能だからどうにもならんし……。
276: (JP 0H91-FhUT) 2023/06/20(火)23:14 ID:Pk8V/jejH(4/4) AAS
>>275
情報ありがとうございます

ご掲示いただいたコードで勉強になりました。
277: (ワッチョイ 69f0-J7ro) 2023/06/20(火)23:42 ID:zCL4VLm70(1/2) AAS
>>273
ザッツcostexprマジック
278: (ワッチョイ 69f0-J7ro) 2023/06/20(火)23:43 ID:zCL4VLm70(2/2) AAS
n抜けてたwコストがかかる演算なのは確かだけどw
constexprマジック!マジック!
279
(2): (ワッチョイ 32fb-dYQK) 2023/06/21(水)00:07 ID:2lh42auf0(1/2) AAS
C++11のSFIANE地獄へようこそ
外部リンク:wandbox.org

template関数の実体化が1つだけ成功して、
他が失敗するように仕掛ければ呼び分けは可能。

ただ見ての通り相当面倒なことを書かなきゃならない。
280
(1): (ワッチョイ 8101-1tDD) 2023/06/21(水)00:28 ID:CWKUsltc0(1/3) AAS
>>279
>>266と本質的に何が違うのか分からない
解説よろしく
(templateでやってることは無駄なのでは?)
281
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)00:41 ID:3HBFHOpK0(1/5) AAS
>>280
いや、 >>279 のほうがちょっと柔軟で使いやすい。
たとえば

void f3(long int, long int) {}

みたいなのを渡したとき >>266 ではエラーになる。
引数として int を渡せる (int から暗黙に変換可能な仮引数を持っている) というのと
厳密に int そのものでなければならないというのとでは制約の厳しさが違う。
282: (ワッチョイ 515f-9XmN) 2023/06/21(水)00:42 ID:LxMKpynY0(1) AAS
templateでやるのは質問者の与えた要件だな
宿題なんじゃね、しらんけど
283
(1): (ワッチョイ 32fb-9xvA) 2023/06/21(水)00:52 ID:2lh42auf0(2/2) AAS
C++14にはif constexprが存在しないから
template使ったオーバーロードしか手段がない

質問者がC++14環境でって言ってたからこんなクソ面倒くさいことやれば一応できるっていう例示
284: (ワッチョイ 8101-1tDD) 2023/06/21(水)01:17 ID:CWKUsltc0(2/3) AAS
>>281,283
ありがとう
>引数として int を渡せる (int から暗黙に変換可能な仮引数を持っている) というのと
>厳密に int そのものでなければならないというのとでは制約の厳しさが違う。
こういうことね
285
(2): (ワッチョイ a901-UvLK) 2023/06/21(水)04:29 ID:IDPPhD2V0(1/3) AAS
>>260
あー本来グローバルも対象になるのか、適当こいてスマソ

だが>>248で質問者が言ってるように、元のコードで順序を変えてもダメなのよ
何故か考えてはちみつのコードを以下のようにしたら同様に通らなかった

namespace ns {
template <class T = int>
struct foo{};
省12
286: (ワッチョイ a901-UvLK) 2023/06/21(水)09:44 ID:IDPPhD2V0(2/3) AAS
あ、すまんfooがクラステンプレートになってるの直し忘れた(直しても同じだが)
287: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)10:22 ID:3HBFHOpK0(2/5) AAS
>>285
名前探索 (name lookup) は狭い名前空間から探索していって
合致する名前があればそれより外側に同名の関数があっても
オーバーロード解決に参加しない。

わかりやすい例で言えばメンバ関数は非メンバより優先されるし、
メンバ関数内にひとつでも候補が見つかった時点で非メンバ関数は一切考慮に入らなくなる。

void foo(void) {}
省9
288: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)10:34 ID:3HBFHOpK0(3/5) AAS
例をちょっと間違えたのでやりなおし。

void foo(int) {}

struct bar {
void baz(void) {
foo(1);
}
void foo(void) {}
省2
289: (ワッチョイ 8101-1tDD) 2023/06/21(水)11:00 ID:CWKUsltc0(3/3) AAS
g++更新にともない
自前ライブラリのビルドでエラーが出るようになって
悩んでたところを解説してくれてる
マジで凄い人達だな
290: (ワッチョイ a901-UvLK) 2023/06/21(水)11:31 ID:IDPPhD2V0(3/3) AAS
>メンバ関数内にひとつでも候補が見つかった時点で非メンバ関数は一切考慮に入らなくなる。
thx。確かにこれ経験したことあるわ・・・ややこしいし名前変えて対処したけど
291: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)12:13 ID:3HBFHOpK0(4/5) AAS
>>285 の例は using を使う形でも解決できる。 (設計意図によってはそれが妥当かどうかわからんけど。)

namespace ns {
struct foo {};

struct hoge {};
int operator+(const hoge& x, const hoge& y) { return 1; }
};

ns::foo operator+(const ns::foo& x, const ns::foo& y) { return ns::foo(); }
省9
292: (ワッチョイ ad10-fL0y) 2023/06/21(水)12:20 ID:s1sJDdcu0(1) AAS
C++って、こういう悪夢みたいなテクニックで溢れかえってるよなあ
RustやらPythonだのに人気が移るわけですよ
293: (テテンテンテン MM96-Axrn) 2023/06/21(水)12:23 ID:xjKiS8Z6M(1) AAS
記法でいうならNimがいいよ。
294: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)16:00 ID:3HBFHOpK0(5/5) AAS
カスタマイズされた関数が呼ばれるようにする綺麗な方法として customization point object という概念が近頃は導入されてる。
綺麗な方法というか汚い部分はライブラリに隠すってだけなんだけど。
真似してみてもいいかもね。

より綺麗な方法が導入されるのはいいんだけど、
過去の方法が消えてなくなるわけでもないし完全に置き換えられるわけでもないからなぁ。
個々には良くなっても全体としては余計に複雑になるだけってのもよくある話。
外部リンク:m.xkcd.com
295: (ワッチョイ c997-trtU) 2023/06/22(木)09:50 ID:+UOgHQ6A0(1) AAS
max RSS (メモリ総量) の取得ってWindowsとLinuxでポータブルな方法ないの?
296: (スプッッ Sd12-9xvA) 2023/06/22(木)10:07 ID:T+/An9G4d(1) AAS
C++標準ライブラリには無い

外部ライブラリに頼るか自分で実装するかになるけど、結局のところ#ifdefでOS依存の機能を呼び分けるしかない
297: (ワッチョイ 196e-ljvc) 2023/06/22(木)10:35 ID:myrOOi5M0(1) AAS
std::uintptr_t get_available_memory();
とプロトタイプだけ用意して、定義を環境別に作るだな

内容的に割と単純な処理のはずで
環境別に用意といってもたいした工数にはなるめえよ
298: (アウアウウー Sacd-Hkv7) 2023/06/22(木)17:54 ID:Sn58Ngpoa(1) AAS
Nim いいよね
C++ 嫌になったら Nim においでおいで
299
(4): (ワッチョイ c997-trtU) 2023/06/23(金)06:00 ID:AFPisFIg0(1) AAS
なんかのオブジェクトをポインタじゃなく実体として持ってるとして、それを delete するやり方ってないの?
たとえば std::vector A に対して
delete &A;
みたいな
300: (ワッチョイ 92ad-DGQF) 2023/06/23(金)06:14 ID:Dz+tkRpF0(1/2) AAS
「実体を持っている」と言うが「誰が」持っているかにもよる
グローバル変数として宣言しているなら予めメモリ上に確保されているから破棄は無理(強引に再利用はできる)
スコープ内で変数として宣言したのなら必要なメモリはスタック上にあるからスタックを弄るしかない
別のオブジェクトのメンバ変数として宣言されているならそのオブジェクトを破棄する
301: (ワッチョイ 92ad-DGQF) 2023/06/23(金)06:17 ID:Dz+tkRpF0(2/2) AAS
スコープ内でってのはローカル変数の意味で言ったの
302: (ワッチョイ 3602-Ul6j) 2023/06/23(金)07:14 ID:GEB8UNzF0(1) AAS
A.~vector<>();でいいんじゃないの?
メモリ解放が必要ならdelete(void*)&A;とかして。
303: (ワッチョイ 196e-ljvc) 2023/06/23(金)07:18 ID:v++V1HM40(1/5) AAS
>>299
deleteはdynamic storage durationのオブジェクトにのみ許される
std::vector<int> A;はautomatic storage durationの場合はその定義を囲むブレースから逸脱すれば破棄される
static storage durationの場合はプログラムの実行終了時に破棄される
thread storage durationの場合はスレッド終了時に破棄される
304: (テテンテンテン MM96-Axrn) 2023/06/23(金)07:19 ID:pmKt7pYtM(1) AAS
極論すれば、c++の変数は自動変数しか無いから、変数で定義しているものはコンパイラに任せるしか無い。
305
(1): (ワッチョイ 196e-ljvc) 2023/06/23(金)07:23 ID:v++V1HM40(2/5) AAS
> c++の変数は自動変数しか無い

???
306: (ワッチョイ adc9-1tDD) 2023/06/23(金)08:10 ID:Z0FiiE+w0(1) AAS
変数の生命期間よりも前に絶つのは new したものを delete する方法しかないよ

std::vector* pA = new std::vector();
std::vector& A = *pA;
 :
 Aで操作
 :
delete pA;
省1
307: (ワッチョイ 196e-ljvc) 2023/06/23(金)08:36 ID:v++V1HM40(3/5) AAS
auto&& A { *new std::vector<int>(0) };
delete &A;
これで「実体」のように偽装はできるけど
こんなコード書くやついたらグーパンだよ
308: (ワッチョイ 92f0-L1I+) 2023/06/23(金)08:38 ID:OoWAXDqh0(1) AAS
このスレ読んでると目の裏がチカチカしてくるなw
309: (ワッチョイ f59c-Axrn) 2023/06/23(金)08:46 ID:z+mnuoLR0(1) AAS
>>305
極論すれば、と言っているだろ。
せめて反例ぐらい出せよ。
310
(1): (ワッチョイ 196e-ljvc) 2023/06/23(金)09:45 ID:v++V1HM40(4/5) AAS
反例っておまえ・・・

静的変数
311
(1): (ワッチョイ 0d4e-L1I+) 2023/06/23(金)10:11 ID:Zb3L9Wmq0(1) AAS
>>299
deleteで何をしたいかによるな
deleteは
・デストラクタを呼び出して
・メモリを開放する
という2つの動作が含まれるが、「メモリを開放する」に関しては、確保されてもいないメモリはもちろん開放できないが、
デストラクタは実体としてはただの関数なので、普通に呼び出すことは可能
省1
312: (ワッチョイ 8101-1tDD) 2023/06/23(金)11:56 ID:jOpqVfQE0(1) AAS
>>299
スコープを終わらせれば消える
313
(2): (テテンテンテン MM96-UmNC) 2023/06/23(金)13:49 ID:RsoTpuHzM(1) AAS
Windows11でc++の開発したいんですけど開発環境何を選べばいいですか?
ちなみに趣味でおもちゃ言語のコンパイラを書こうと思います
314
(1): (スッップ Sdb2-Ul6j) 2023/06/23(金)14:29 ID:P5Uu3Ce/d(1) AAS
wslのclangでいいんじゃないの
315: (ワッチョイ 515f-C6j3) 2023/06/23(金)14:40 ID:79pDbKtj0(1) AAS
>>311
> 2重に呼び出しても大丈夫なように設計されたクラスである必要はある
trivial destructor 以外は(空の ~T() {} 含め)どうがんばっても大丈夫にはならず未定義動作となる模様。
外部リンク[life]:timsong-cpp.github.io
316
(3): (テテンテンテン MM96-UmNC) 2023/06/23(金)14:42 ID:XaN8/xk5M(1) AAS
>>314
visual studioでできませんか?
visual studioに依存しないような形で
317: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/23(金)14:49 ID:Xemzxb7u0(1/3) AAS
>>316
依存するかしないかはプログラマが気を付けることだろ
318: (ワッチョイ 196e-ljvc) 2023/06/23(金)14:58 ID:v++V1HM40(5/5) AAS
>>316
つーか俺はVisual Studioを推奨する
コンパイラ本体が昔からしっかりしてるし
デバッガは無数の信者を抱えるクオリティ
319: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/23(金)15:11 ID:Xemzxb7u0(2/3) AAS
俺はコンパイラは複数を利用するのが好ましいと思う。
気を付けてても処理系に依存している (または未定義を踏んでいる) こともある。
いくつかのコンパイラで試してみれば問題点を発見しやすい。

発現した問題についてはデバッガなりなんなりで追えばいいんだが、
問題が潜伏したまま表面に現れないってのは後になってじわじわ効いてきたりするし……。
320: (アウアウウー Sacd-Hkv7) 2023/06/23(金)16:11 ID:lCxAQSJFa(1/2) AAS
>>299
デストラクタに直接リソース解放させるより
リソース解放用の dispose() みたいな関数を造っておいて
デストラクタから dispose() 呼ぶのと同時に
delete しないで dispose() だけ外から呼ぶ設計もあるよ
1-
あと 682 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.035s