如何使函数返回指针到C 中的数组或对象

How to make function return pointer to an array or object in C++?

本文关键字:数组 对象 何使 函数 返回 指针      更新时间:2023-10-16

我对发现其他语言中的简单内容感到困惑。我想获得对类或结构中包含的对象的引用。我要使用两个不同功能之一(此处 - getData ())。

问题:

所以,我不确定要使用哪一个,它们似乎做同样的事情。另一件事,我应该关心一些原因,因为这是一个联盟?这里最重要的问题是 - 我不确定 delete 我在某些答案中发现的部分并会在某个时候导致一些内存泄漏。

#include <iostream>
#include <stdint.h>
using namespace std;
class settings_t {
  private:
  static const  long b1 =0;
    uint8_t setmap;
  public:
    uint8_t myBaseID; 
    uint8_t reserved1;
    uint8_t reserved2;
};  
class test1 {
  public: //actually, I want this to be private
    long v1;
    settings_t st;
    union {
      uint8_t data[4];
      uint32_t m1;
      settings_t st1;
    };
  public:
    uint8_t * getData() {
      return data;
    }
    uint8_t (&getData2())[4] {
      return data;
    }
};
int main() {
  test1 t1;
  t1.data[2]=65;
  uint8_t *d1 = t1.getData();
  cout<<" => " << d1[2];
  d1[2]=66;
  uint8_t *d2 = t1.getData2();
  cout<<" => " << d2[2];
}

c 与c#或java等语言的主要区别在于,它没有为您提供内置内置的内存内存管理(不是托管语言)。因此,如果该程序将内存分配为C ,则该程序在不需要时释放内存的责任。因此,您的答案中的delete基于此要求。

但是,在您的情况下,getData()函数返回一个指针,该指针是类test1的一部分。这是一个数组,只要存在该类的对象,数组就会存在。GetData的两个版本都可以使用。

您没有使用任何动态数据分配,test1类型的对象t1已分配在主函数的堆栈上,并存在直到您的程序退出为止。您不必担心"删除"。

您使用的两种方法之间的区别在于,第一个方法不在乎它返回的数组大小,无论另一个方法是否返回。因此,第二种方法的实际用途非常有限,但提供了更好的句法检查。