I want to create an object only if some conditions apply, otherwise retun nullptr. Here is how I would do it in Delphi (2009+):
function GetGen(n : integer) : Generics.Collections.TList<Integer>; var i : integer; begin result := nil; if n > 0 then begin result := Generics.Collections.TList<Integer>.Create; for i := 0 to n - 1 do result.Add(i); end; end; procedure TestGenList(n : integer); var aInt : integer; aGen : Generics.Collections.TList<Integer>; begin aGen := GetGen(n); if aGen = nil then begin WriteLn('No generic created!'); Exit; end; WriteLn(Format('Size: %d', [aGen.Count])); for aInt in aGen do Write(Format('%d ', [aInt])); aGen.Free; //will clear integers end; procedure TestGen begin TestGenList(0); Readln; TestGenList(5); Readln; end.
Here is how I could do it in C ++:
unique_ptr<vector<int>> GetUniquePrtVec(int n){ if (n < 1) return(nullptr); //create only if correct input is given unique_ptr<vector<int>> result (new vector<int>); for (int i = 0 ; i != n; i++){ result->push_back(i); } return(move(result)); } void TestPtrVec(int n){ unique_ptr<vector<int>> vec = GetUniquePrtVec(n); if (vec == nullptr){ cout << "No vector created" << endl; return; } cout << endl << vec->size() << endl; for_each(vec->begin(), vec->end(), [](int n){cout << n << " " << endl;}); vec->clear(); //clear vector vec.reset(nullptr); } void testVec3(){ TestPtrVec(0); TestPtrVec(5); }
My question is about the correct idiom. Guys, experienced C ++ programmers (since I'm new, just learning the language), do it like this? If not, how will you do it?
Thanks.
c ++ idioms smart-pointers
Mihaela
source share