【发布时间】:2016-09-21 10:26:02
【问题描述】:
我有一个方法应该返回一些整数。这些整数将在构造函数之后使用。由于我对指针不太满意,所以我决定使用向量作为返回类型,以便稍后在 myObject 的构造函数中使用 myVector[i] 访问不同的整数。
但是我的同事说在这种情况下将 int* 作为返回类型更好,因为“如果要返回容器,那么您最好返回一个 myObject 类型并直接在方法中实例化它”。
所以在这种情况下,使用指针似乎更好。这是真的吗?那为什么?
编辑:好的,我会在这里详细说明。
这是我的具有三个 int 属性的类:
class MyClass{
public:
MyClass(int x, int y, int s);
private:
int coord_x;
int coord_y;
int size;
}
在另一个 .cpp 文件中,我有这样的方法:
// FileWithMethod.cpp
vector<int> myMethod(){
// some code here
return my_vector;
}
my_vector 有 3 个 int 并且总是如此,因为它的元素将用于在第二个 .cpp 文件中实例化一个 MyClass 对象。
这里的讨论是 myMethod() 的返回类型应该是 int* 还是向量。我的同事建议使用 int* ,因为“实现这种结构是没有用的(即返回参数的方法,稍后将在构造函数中使用)”。他为什么这么说,我不知道。他说如果我们使用指针,这个结构很有趣,但如果我们使用容器,那么最好直接返回一个用 3 int 实例化的 MyClass 对象。因此,他似乎显然反对向量的想法,可能是在内存分配/管理方面,并且更喜欢对 MyClass 对象使用 int* 。
在这里,我认为 C++ 的主要资产是摆脱棘手的指针,仅在没有其他选择或性能差异不可忽略时才使用它们。
我希望这能更清楚地说明情况。抱歉解释模糊。我很难估计所提供的细节数量是否足以在您处理问题并且没有外部视角时理解问题:)。
感谢您的回答,他们已经很有帮助了!
【问题讨论】:
-
我认为我几乎明白你在说什么,但这个问题很模糊。您能否提供代码示例,并提供您选择的“更好”定义?对于它的价值,返回一个向量是一个很好的默认位置,因为它很简单并且对数据所有权没有任何疑问,但我不清楚你同事的建议是否打破了这一点,或者只是提出了一种更好的填充向量的方法。无论哪种方式,目前都没有可以安全地给出这个问题的包罗万象的答案。也就是说,取决于。
-
我猜你同事的意思是你在函数中构造对象并返回对象而不是硬币容器(或 int*)。容器的优点是您知道其中有多少元素。如果你只返回和
int*你不知道元素的数量。 -
@Shahriyar,使用原始数组并不比使用向量更快,也不是更有效。但它更难,更容易出错。
-
直接返回一个
myObject而不是其构造函数的参数是有问题的,如果以后你可能想创建一个myDerivedObject。 -
@Shahriyar:他们更难合理化和证明行为。这是客观事实。不管你有多聪明。没有必要“离开 C++”,因为至少在过去的二十年里,使用标准容器在 C++ 中一直是惯用且司空见惯的。 C++ 不是 C。而且,不,它并没有更高效。如果您要比较动态分配与非动态分配,那很好,但要诚实。