Re: Generic C++ templates/library for FreeBSD base
Gleb Popov <[email protected]>
| Newsgroups | gmane.os.freebsd.architechture |
|---|---|
| Message-ID | <CALH631=GyZ=PY6+BEm1DpcLizo8p2nPUdSBRTLHaNObqW=RBUA@mail.gmail.com> |
On Thu, Mar 13, 2025 at 11:53 PM John Baldwin <[email protected]> wrote: > > One is a stringf() function that accepts printf() style format string and > arguments and returns a std::string. I know C++23 adds <format>, but we > can't assume that yet, and this function is probably more useful when > adapting existing C code. Compared to some other solutions, I chose to > wrap asprintf() and do an extra copy at the end into a std::string rather > than calling vsnprintf() twice. It seems less ugly than the vsnprintf() > solutions also: > > https://github.com/freebsd/freebsd-src/commit/01bd3d89ddf9ccbf884e52fe7289e8a9278e2d63 I wonder why std::string always copies the data passed into the constructor. It is possible to avoid extra alloc by returning a std::string_view, but this would force the caller into freeing the memory manually. Maybe derive from it and extend the destructor, but this just brings me to the initial question. > The other is a FILE_up that wraps a FILE * and uses fclose() as its deleter > buried as part of a larger change: > > https://github.com/freebsd/freebsd-src/commit/77b800022b18ab61983b22022b16943355b2bf75 I see the code uses exceptions. Was it a conscientious decision?