我有一个代码片段,如下所示。
我认为这是一个返回指针的坏方法,因为我返回一个本地引用。什么是好的做法,返回DbTable
副本或指针DbTable *
?
DbTable * Catalog::addTable(PartitionScheme &partScheme, BoundBases &bounds, std::vector<int> &colsPartitioned, const size_t defaultMaxFragmentSize, const TupleDesc &tupleDesc , std::string tableName){
// some code ...
DbTable * dbTable = new DbTable(tableId, basePath, defaultMaxFragmentSize, tupleDesc, partScheme, bounds, colsPartitioned);
cout << "adding dbTable with name: " << tableName << " and table Id " << tableId << endl;
// some code ...
return dbTable;
}
}
答案 0 :(得分:1)
除非有正当理由不这样做,否则更喜欢在堆上分配的指针上返回一个对象。
返回对象的优点
什么时候返回指针才有意义?
我怀疑还有很多其他原因支持两种用例。我刚刚列出了一些在脑海中跳出来的东西。
答案 1 :(得分:-1)
当从函数返回指针时,如果指针指向本地分配的内存(不在堆上),则一旦函数结束,它将被释放。因此,在这种情况下,返回指针并不是一个好习惯。
在您的情况下,由于内存是在堆上分配的,因此您可以返回指针。