c# - 用 C++ 编写的存储结构和类在哪里?

标签 c# c++ class struct stack

在 C# 中,类存储在堆中,而结构存储在堆栈中。

在 C++ 中,类和结构是否以相同的方式存储(假设我静态创建我的类和结构,并且类或结构的每个成员都不是由 new 分配的)?

请使用下面的代码片段对此进行解释:

class B
{
int b;
}

class C
{
int c;
}

class A
{
B b;
C c;
int x;
}

struct SB
{
int sb;
}

struct SC
{
int sc;
}

struct SA
{
SB sb;
SC sc;
int x;
}

void main()
{
A a1;
A *a2 = new A;

SA sa1;
SA *sa2 = new SA;
}

最佳答案

结构的存储方式与类的存储方式没有(必要的)区别。事实上,C++ 中结构和类的唯一区别是结构成员默认是公共(public)的,而类成员默认是私有(private)的。

与任何其他类型的对象一样,类或结构类型的对象具有存储期限,这取决于它的创建方式。

在函数内声明的对象的生命周期仅限于封闭 block ;这通常是通过将其存储在堆栈中来实现的。

在函数外部声明的对象,或使用 static 关键字声明的对象,其生命周期贯穿程序的整个执行过程;这可以通过将其存储在数据段中来实现。

new 运算符(或 malloc() 调用)分配的对象一直存在,直到它被 deleted(或 free( )编辑);此类对象分配在“自由存储”中,有时非正式地称为“堆”。

关于c# - 用 C++ 编写的存储结构和类在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210143/

相关文章:

C# Monotouch/Xamarin.iOS - AVPlayer 设置音量

android - 任何支持 48 kHz 的声学回声消除 (AEC) 库?

c++ - 避免数据损坏的文件结构

java - 类之间调用特定方法

python - 多线程类(python)

c++ - 我的类包含 1 个枚举、2 个整数和一个指针。它没有虚函数,但有 20 个字节。为什么?

c# - 如何将变量插入带有多个引号和转义字符的长字符串中?

c# - 为什么 SqlException 在连接失败时被重用

c# - 如何根据其他两个字段的值从 MSSQL 返回一个字段

c# - 为什么这个 P/Invoke 签名不起作用?