日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > Difference between new A and new A()

Difference between new A and new A()

來(lái)源:程序員人生   發(fā)布時(shí)間:2016-06-22 08:37:26 閱讀次數(shù):2691次

問(wèn)題:
A是1個(gè)類(lèi),我們常常new1個(gè)A的對(duì)象,你常常會(huì)這么寫(xiě):

A *pa = new A();

但是如果我這么寫(xiě)呢:

A *pa = new A;

二者有甚么區(qū)分嗎? 這就是我們今天要討論的問(wèn)題。

先給出答案,再漸漸解釋

If the class has a default constructor defined, then both are equivalent; the object will be created by calling that constructor.

If the class only has an implicit default constructor, then there is a difference. The first will leave any members of POD type uninitialised; the second will value-initialise them .

甚么是POD

POD的意思是 Plain Old Data,即1個(gè)class或struct沒(méi)有構(gòu)造函數(shù)、析構(gòu)函數(shù)、虛函數(shù)。維基百科上這么描寫(xiě):

A Plain Old Data Structure in C++ is an aggregate class that contains only PODS as members, has no user-defined destructor, no user-defined copy assignment operator, and no nonstatic members of pointer-to-member type.

int, char, wchar_t, bool, float, double are PODs, as are long/short and signed/unsigned versions of them.

pointers (including pointer-to-function and pointer-to-member) are PODs,
enums are PODs

a const or volatile POD is a POD.

a class, struct or union of PODs is a POD provided that all non-static data members are public, and it has no base class and no constructors, destructors, or virtual methods. Static members don’t stop something being a POD under this rule.

我們就定義1個(gè)POD的類(lèi):

class A { int m; };

再定義兩個(gè)非POD類(lèi):

class B { ~B(); }; class C { C() : m() {}; int m; };

接下來(lái)就是使用了:

#include<iostream> using namespace std; class A { public: int m; }; class B { public: ~B() {}; public: int m; }; class C { public: C() : m() {}; public: int m; }; int main() { A *aObj1 = new A; A *aObj2 = new A(); cout << aObj1->m << endl; cout << aObj2->m << endl; B *bObj1 = new B; B *bObj2 = new B(); cout << bObj1->m << endl; cout << bObj2->m << endl; C *cObj1 = new C; C *cObj2 = new C(); cout << cObj1->m << endl; cout << cObj2->m << endl; delete aObj1; delete aObj2; delete bObj1; delete bObj2; delete cObj1; delete cObj2; return 0; }

輸出:
18780112
0
4522067
0
0
0

在所有C++版本中,只有當(dāng)A是POD類(lèi)型的時(shí)候,new A和new A()才會(huì)有區(qū)分

就是再看看如何判斷是否是POD,不用認(rèn)為判斷:

#include <iostream> #include <type_traits> struct A { int m; }; struct B { int m1; private: int m2; }; struct C { virtual void foo(); }; int main() { std::cout << std::boolalpha; std::cout << std::is_pod<A>::value << '\n'; std::cout << std::is_pod<B>::value << '\n'; std::cout << std::is_pod<C>::value << '\n'; }

輸出:
true
false
false

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久精品99 | 久久久国产一区二区三区四区小说 | 国产精品一区二区三区在线 | 日韩视频中文字幕 | 国产日韩欧美一区 | 亚洲精品国产第一综合99久久 | 久久国产精品-国产精品 | 国产在线一区二区 | 免费看国产片在线观看 | 日韩成人在线观看 | 91麻豆精品国产91久久久使用方法 | 日韩2区| 91精品国产综合久久精品图片 | 最新国产精品精品视频 | 日日网 | 亚洲欧美日韩国产综合 | 二区在线观看 | 在线欧美国产 | 日韩中文在线观看 | 午夜日韩 | 污视频免费在线看 | 精品国产精品国产偷麻豆 | 国产免费小视频 | 久久久久久久久综合 | 成人精品在线观看 | 视频在线亚洲 | 免费看黄a | 11www色com| 91视频日本 | 国产精品久久久久久久久久三级 | 视频一区二区三区在线观看 | 免费一级淫片 | 久久久久久久一区 | av福利在线 | av在线播放一区二区三区 | 久久久久亚洲综合 | 爱爱的网站 | 婷婷综合社区 | 中文字幕成人网 | 日韩精品视频在线播放 | 国产电影在线观看 |