Is there a standard way to indicate that a function returns a new pointer?
No, non esiste un "metodo standard" (ma esiste un criterio di progettazione dell'API attualmente considerato "best practice").
A causa di questa ambiguità ("cosa deve fare una funzione che restituisce un puntatore con esso?"), al momento è considerata best practice imporre la durata e il criterio di proprietà, attraverso il tipo restituito:
<vertex pointer type> new_vertex(const Options& options);
<vertex pointer type>
può essere std::unique_ptr
("new_vertex non possiede il puntatore"), o std::shared_ptr
("il codice client non possiede il puntatore"), o qualcos'altro, che ha una semantica di proprietà chiaramente definita (ad esempio, Vertex const * const
indica al codice cliente "legge l'indirizzo e i valori, ma non modifica né / non elimina il puntatore").
In generale, non si dovrebbe restituire un puntatore raw (ma in alcuni casi, "la praticità batte la purezza").
TLDR : esiste una best practice ( yes ), ma non standard (nella lingua).
Modifica :
where the function is only intended to be used to within a class that owns the Vertex
Se la classe possiede il vertice, lo scriverei in questo modo:
class SomeClass // owns the vertex
{
void do_stuff() // uses the vertex internally
{
init_vertex(); // see below
assert(vertex.get());
// use vertex as needed
}
private:
// "class owns the Vertex"
std::unique_ptr<Vertex> vertex;
// sets the internal vertex
// function doesn't return a pointer of any kind
void init_vertex(const Options& options); // or "reset_", "refresh_",
// or "make_" vertex,
// if the pointer can change
// throughout the lifetime
// of a SomeClass instance
};