【问题标题】:in c++ how do I return an array of objects from a function?在 C++ 中,如何从函数返回对象数组?
【发布时间】:2010-11-09 21:09:10
【问题描述】:

在 C++ 中,我如何从函数中返回一个对象数组?

【问题讨论】:

  • 你的书怎么说?

标签: c++ arrays


【解决方案1】:

通过返回一个 std::vector。

【讨论】:

    【解决方案2】:
    myobject *myfunc()
    {
        return new myobject[10];
    }
    

    但请注意 - 您正在将数组的所有权转移给调用者,这可能会导致内存泄漏。

    编辑:返回指向数组的指针比返回 std::vector 快得多。如果您要使用 std::vector (正如其他人所写),您可能更喜欢这样做:

    void myfunc(std::vector<myobject> &result)
    {
        result.resize(0);
        for(int i=0;i<10;++i)
           result.push_back(myobject());
    }
    

    【讨论】:

    • 技术上正确。但这忽略了这是一个可怕的代码这一事实。 (编辑:也许是对象)
    • @John 这段代码有什么可怕的?对象与此有什么关系?
    • @Let_Me_Be:以相反的顺序:OP 专门询问对象数组。如果您已经使用 SO 超过几天,那么应该清楚为什么这很糟糕。泄漏内存不好,这段代码是内存泄漏的温床。
    • @GMan:如果函数的返回值没有在初始化程序中使用,NRVO 并没有多大帮助,并且 C++0x 中的移动语义与 java.util. lang.Vector 可以通过垃圾收集引用有效地返回,如果您使用的只是标准 C++。我认为 C++ 在这里有点尴尬 - 所有选项都有缺点(按值返回向量可能效率很低;传递向量会破坏表达式;返回原始分配是可怕的;必须编译采用输出迭代器的模板函数)。我们不能总是假装它不是。
    • 不要怪我 C++ 没有一个好的内置机制来返回对大数据结构的引用。
    猜你喜欢
    • 2021-01-30
    • 2021-08-09
    • 2018-01-25
    • 2012-06-17
    • 2015-12-15
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多