如何使函数返回指针到C 中的数组或对象
How to make function return pointer to an array or object in C++?
我对发现其他语言中的简单内容感到困惑。我想获得对类或结构中包含的对象的引用。我要使用两个不同功能之一(此处 - 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
已分配在主函数的堆栈上,并存在直到您的程序退出为止。您不必担心"删除"。
您使用的两种方法之间的区别在于,第一个方法不在乎它返回的数组大小,无论另一个方法是否返回。因此,第二种方法的实际用途非常有限,但提供了更好的句法检查。
相关文章:
- 销毁C++中动态分配的内存(数组对象)
- 数组对象的生存期是否在重用其元素存储时结束?
- 为什么顶点数组对象会导致错误?
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- OpenGL 顶点数组对象与 tinyobjloader
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- C++ RapidJson 帮助反序列化数组对象
- ptrdiff_t可以表示指向同一数组对象元素的指针的所有减法吗?
- 检查成员函数是否返回临时对象或数组对象
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 当数组对象以函数参数传递时,为什么复制构造函数会自称
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- C++17 std::shared_ptr<> 类数组对象的重载运算符 []
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- opengl:两个不同的矢量可以绑定到同一个顶点数组对象吗
- 使用相同的数据填充数组对象或使用指针
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- 如何将2d数组对象传递给c++中的函数
- ReferenceTable溢出(jni-android),数组对象释放