xref: /freebsd/lib/libutil++/freebsd__malloc_up.3 (revision 159503125826bc2d3b988921e7e85735ee09ad46)
1*15950312SJohn Baldwin.\"
2*15950312SJohn Baldwin.\" SPDX-License-Identifier: BSD-2-Clause
3*15950312SJohn Baldwin.\"
4*15950312SJohn Baldwin.\" Copyright (c) 2025 Chelsio Communications, Inc.
5*15950312SJohn Baldwin.\" Written by: John Baldwin <jhb@FreeBSD.org>
6*15950312SJohn Baldwin.\"
7*15950312SJohn Baldwin.Dd July 31, 2025
8*15950312SJohn Baldwin.Dt FREEBSD::MALLOC_UP 3
9*15950312SJohn Baldwin.Os
10*15950312SJohn Baldwin.Sh NAME
11*15950312SJohn Baldwin.Nm freebsd::malloc_up
12*15950312SJohn Baldwin.Nd std::unique_ptr specialization for objects allocated via malloc
13*15950312SJohn Baldwin.Sh LIBRARY
14*15950312SJohn Baldwin.Lb libutil++
15*15950312SJohn Baldwin.Sh SYNOPSIS
16*15950312SJohn Baldwin.In libutil++.hh
17*15950312SJohn Baldwin.Ft using malloc_up = std::unique_ptr<T, free_deleter<T>>;
18*15950312SJohn Baldwin.Sh DESCRIPTION
19*15950312SJohn BaldwinThis class is a specialization of
20*15950312SJohn Baldwin.Vt std::unique_ptr
21*15950312SJohn Baldwinwhich invokes
22*15950312SJohn Baldwin.Xr free 3
23*15950312SJohn Baldwininstead of
24*15950312SJohn Baldwin.Fn delete
25*15950312SJohn Baldwinwhen an object is disposed.
26*15950312SJohn BaldwinWhile explicit calls to
27*15950312SJohn Baldwin.Xr malloc 3
28*15950312SJohn Baldwinshould be avoided in C++ code,
29*15950312SJohn Baldwinthis class can be useful to manage an object allocated by an existing API
30*15950312SJohn Baldwinwhich uses
31*15950312SJohn Baldwin.Xr malloc 3
32*15950312SJohn Baldwininternally such as
33*15950312SJohn Baldwin.Xr scandir 3 .
34*15950312SJohn BaldwinNote that the type of the underlying object must be used as the first
35*15950312SJohn Baldwintemplate argument similar to std::unique_ptr.
36*15950312SJohn Baldwin.Sh EXAMPLES
37*15950312SJohn BaldwinThis example uses
38*15950312SJohn Baldwin.Xr strdup 3
39*15950312SJohn Baldwinfor simplicity,
40*15950312SJohn Baldwinbut new C++ code should generally not use
41*15950312SJohn Baldwin.Xr strdup 3 :
42*15950312SJohn Baldwin.Bd -literal -offset indent
43*15950312SJohn Baldwinfreebsd::malloc_up<char> my_string(strdup("foo"));
44*15950312SJohn Baldwin// `mystring' is implicitly freed on destruction
45*15950312SJohn Baldwin.Ed
46*15950312SJohn Baldwin.Sh SEE ALSO
47*15950312SJohn Baldwin.Xr free 3 ,
48*15950312SJohn Baldwin.Xr malloc 3 ,
49*15950312SJohn Baldwin.Xr scandir 3 ,
50*15950312SJohn Baldwin.Xr strdup 3
51