我正在研究C ++。我正在使用MVSV 2010。
当我编译源代码并使用-d1reportAllClassLayout转储所有类的内存布局时。
例如,我声明了struct:
WebView webview = (WebView) findViewById(R.id.wb);
webview.getSettings().setJavaScriptEnabled(true);
String pdf = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf";
webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);
结构的内存布局如下:
struct my_struct{
int a;
};
这是否意味着C ++编译器认为struct与所有内容一样? (Expept to default access specifier)
如果那样,那么struct的构造函数和解构函数呢?
是否有结构的默认构造函数和解构函数?它类似于Class?
非常感谢您的支持,
答案 0 :(得分:4)
在C ++类和struct中(几乎)完全相同。它们之间的唯一区别是类的默认值为private
,默认的struct为public
答案 1 :(得分:1)
在C ++中,类的概念按以下方式定义
class-specifier:
class-head { member-specificationopt}
其中class-head依次定义为
class-head:
class-key attribute-specifier-seqopt class-head-name class-virt-specifieropt base-clauseopt
class-key attribute-specifier-seqopt base-clauseopt
,其中
class-key:
class
struct
union
因此,结构是具有类键struct
的类。
和(C ++标准版12.1构造函数)
4类X的默认构造函数是类X的构造函数 可以不带参数调用。 如果没有用户声明 类X的构造函数,没有参数的构造函数 隐式声明为默认(8.4)。一个隐含声明的 default constructor是其类的内联公共成员...
由于结构是类,并且没有用户声明的构造函数,因此编译器会隐式声明这样的构造函数。
答案 2 :(得分:1)
精心设计的类为其提供了一个简洁的界面 用户,隐藏其表示并保存其用户不必 了解这种表述。如果代表不应该 隐藏 - 比方说,因为用户应该能够更改任何数据成员 他们喜欢的任何方式 - 你可以把那个课程视为“只是一个普通的老人 数据结构“;例如:
struct Pair {
string name, value; };
结构是类似或不同数据类型的集合。类通过允许在结构内包含函数来扩展结构的范围。现在,如果一个结构只是数据类型的集合,你肯定可以像构造函数一样将它们初始化为某个默认值,否则编译器会像Vlad的回答中提到的那样隐式地为你做这个,但是你不需要任何析构函数和默认情况下没有析构函数。
答案 3 :(得分:0)
这可能只是意味着d1reportAllClassLayout报告它们都是相同的