本篇內(nèi)容介紹了“C++智能指針對(duì)程序文件大小有什么影響”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、永定網(wǎng)絡(luò)推廣、小程序定制開(kāi)發(fā)、永定網(wǎng)絡(luò)營(yíng)銷、永定企業(yè)策劃、永定品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供永定建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
C++智能指針對(duì)程序文件大小的影響
于是我想做一個(gè)實(shí)驗(yàn),看智能指針會(huì)帶來(lái)多大的文件體積開(kāi)銷。
于是做了個(gè)對(duì)比實(shí)驗(yàn):
raw_ptr.cpp
#include < iostream>
#include < vector>
using namespace std;
class Child;
class Parent {
public:
~Parent();
Child* newChild();
void hello() {
cout << "Parent::Hello" << endl; } private: vector children_; }; class Child { public: Child(Parent *p) : parent_(p) {} void hello() { cout << "Child::Hello" << endl; parent_->hello();
}
private:
Parent *parent_;
};
Child* Parent::newChild()
{
Child *child = new Child(this);
children_.push_back(child);
return child;
}
Parent::~Parent()
{
for (int i = 0; i < children_.size(); ++i) delete children_[i]; children_.clear(); } int main() { Parent p; Child *c = p.newChild(); c->hello();
return 0;
}
smart_ptr.cpp
#include < iostream>
#include < vector>
#include < memory>
using namespace std;
class Child;
class Parent : public enable_shared_from_this {
public:
~Parent();
shared_ptr newChild();
void hello() {
cout << "Parent::Hello" << endl; } private: vector > children_;
};
class Child {
public:
Child(weak_ptr p) : parent_(p) {}
void hello() {
cout << "Child::Hello" << endl; shared_ptr sp_parent = parent_.lock(); sp_parent->hello();
}
private:
weak_ptr parent_;
};
shared_ptr Parent::newChild()
{
shared_ptr child = make_shared(weak_from_this());
children_.push_back(child);
return child;
}
Parent::~Parent()
{
children_.clear();
}
int main() {
shared_ptr p = make_shared();
shared_ptr c = p->newChild();
c->hello();
return 0;
}
empty.cpp
#include < iostream>
int main()
{
std::cout << "hello" << std::endl; return 0; } Makefile all: g++ -o raw_ptr raw_ptr.cpp -O2 g++ -o smart_ptr smart_ptr.cpp -O2 g++ -o empty empty.cpp -O2 strip raw_ptr strip smart_ptr strip empty empty 是什么功能都沒(méi)有,編譯它是為了比較出,raw_ptr.cpp 中應(yīng)用程序代碼所占有空間。 將 raw_ptr 與 smart_ptr 都減去 empty 的大?。? raw_ptr 4192B smart_ptr 8360B 而 smart_ptr 比 raw_ptr 多出 4168B,這多出來(lái)的就是使用智能指針的開(kāi)銷。
目前來(lái)看,智能指針額外占用了一倍的程序空間。它們之間的關(guān)系是呈倍數(shù)增長(zhǎng),還是別的一個(gè)關(guān)系?
那么引入智能指針是哪些地方的開(kāi)銷呢?
大概有:
類模板 shared_ptr, weak_ptr 為每個(gè)類型生成的類。
代碼邏輯中對(duì)智能指針的操作。
第一項(xiàng)是可預(yù)算的,有多少個(gè)類,其占用的空間是可預(yù)知的。而第二項(xiàng),是很不好把控,對(duì)指針對(duì)象訪問(wèn)越多越占空間。
總結(jié):
使用智能指針的代價(jià)會(huì)使程序的體積多出一半。
“C++智能指針對(duì)程序文件大小有什么影響”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!