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