家の中を整理していたら、Visual Studio 2003 が出てきました。20年前と今日の C++ を比較するとまったく別の言語というほど違っている気がします。
一番大きく進化した点はメモリ管理ではないかと思います。20年前は new, delete または Windows の場合は HeapAlloc, HeapFree でヒープメモリを管理していたものですが、現在は shared_ptr, unique_ptr で管理するようになりました。C++11 の頃は配列操作ができませんでしたが、C++17 辺りから配列操作にも対応しています。
#include <memory>
#include <string>
struct Chunk {
std::wstring content;
int content_type;
};
void work() {
auto chunk_arrptr<Chunk[]> = std::make_shared<Chunk[]>(3);
Chunk &c0 = chunk_arrptr[0];
...
}
と言いつつ、手軽な new, delete をまだ使ったりしてしまいますが。
一方で、ソケット関係は色々出てきましたが、結局 Winsock に戻ってしまっている気がします。
あるプロジェクトのために TLS を扱うためのコードを探していたのですが、Visual Studio 2022 でまともに動いたのは Winsock を直叩きするプログラムだけでした。UNIX 系 OS と違い、Winsock はファイルディスクリプタとは異なるため、バッファ入出力が必要な場合(そしてそのようなケースがほとんどです)は自作する必要があります。
昔の Winsock はバッファサイズが100バイトあまりしかなくて、非常に実行効率が悪かったのですが、今の Winsock はどうなんでしょうか?
コメントを残す