精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++ 為什么不加入垃圾回收機制

開發 后端
在本文中,我并不想揭露Java提供的垃圾回收機制的天生缺陷,而是指出了C++中引入垃圾回收的可行性。請讀者注意,這里介紹的方法更多的是基于當前標準和庫設計的角度,而不是要求修改語言定義或者擴展編譯器。

Java的愛好者們經常批評C++中沒有提供與Java類似的垃圾回收(Gabage Collector)機制(這很正常,正如C++的愛好者有時也攻擊Java沒有這個沒有那個,或者這個不行那個不夠好),導致C++中對動態存儲的官吏稱為程序員的噩夢,不是嗎?你經常聽到的是內存遺失(memory leak)和非法指針存取,這一定令你很頭疼,而且你又不能拋棄指針帶來的靈活性。

在本文中,我并不想揭露Java提供的垃圾回收機制的天生缺陷,而是指出了C++中引入垃圾回收的可行性。請讀者注意,這里介紹的方法更多的是基于當前標準和庫設計的角度,而不是要求修改語言定義或者擴展編譯器。

什么是垃圾回收?

作為支持指針的編程語言,C++將動態管理存儲器資源的便利性交給了程序員。在使用指針形式的對象時(請注意,由于引用在初始化后不能更改引用目標的語言機制的限制,多態性應用大多數情況下依賴于指針進行),程序員必須自己完成存儲器的分配、使用和釋放,語言本身在此過程中不能提供任何幫助,也許除了按照你的要求正確的和操作系統親密合作,完成實際的存儲器管理。標準文本中,多次提到了“未定義(undefined)”,而這大多數情況下和指針相關。

某些語言提供了垃圾回收機制,也就是說程序員僅負責分配存儲器和使用,而由語言本身負責釋放不再使用的存儲器,這樣程序員就從討厭的存儲器管理的工作中脫身了。然而C++并沒有提供類似的機制,C++的設計者Bjarne Stroustrup在我所知的唯一一本介紹語言設計的思想和哲學的著作《The Design and Evolution of C++》(中譯本:C++語言的設計和演化)中花了一個小節討論這個特性。簡而言之,Bjarne本人認為,

“我有意這樣設計C++,使它不依賴于自動垃圾回收(通常就直接說垃圾回收)。這是基于自己對垃圾回收系統的經驗,我很害怕那種嚴重的空間和時間開銷,也害怕由于實現和移植垃圾回收系統而帶來的復雜性。還有,垃圾回收將使C++不適合做許多底層的工作,而這卻正是它的一個設計目標。但我喜歡垃圾回收的思想,它是一種機制,能夠簡化設計、排除掉許多產生錯誤的根源。

需要垃圾回收的基本理由是很容易理解的:用戶的使用方便以及比用戶提供的存儲管理模式更可靠。而反對垃圾回收的理由也有很多,但都不是最根本的,而是關于實現和效率方面的。

已經有充分多的論據可以反駁:每個應用在有了垃圾回收之后會做的更好些。類似的,也有充分的論據可以反對:沒有應用可能因為有了垃圾回收而做得更好。

并不是每個程序都需要永遠無休止的運行下去;并不是所有的代碼都是基礎性的庫代碼;對于許多應用而言,出現一點存儲流失是可以接受的;許多應用可以管理自己的存儲,而不需要垃圾回收或者其他與之相關的技術,如引用計數等。

我的結論是,從原則上和可行性上說,垃圾回收都是需要的。但是對今天的用戶以及普遍的使用和硬件而言,我們還無法承受將C++的語義和它的基本庫定義在垃圾回收系統之上的負擔。”

以我之見,統一的自動垃圾回收系統無法適用于各種不同的應用環境,而又不至于導致實現上的負擔。稍后我將設計一個針對特定類型的可選的垃圾回收器,可以很明顯地看到,或多或少總是存在一些效率上的開銷,如果強迫C++用戶必須接受這一點,也許是不可取的。

關于為什么C++沒有垃圾回收以及可能的在C++中為此做出的努力,上面提到的著作是我所看過的對這個問題敘述的最全面的,盡管只有短短的一個小節的內容,但是已經涵蓋了很多內容,這正是Bjarne著作的一貫特點,言簡意賅而內韻十足。

下面一步一步地向大家介紹我自己土制佳釀的垃圾回收系統,可以按照需要自由選用,而不影響其他代碼。

構造函數和析構函數

C++中提供的構造函數和析構函數很好的解決了自動釋放資源的需求。Bjarne有一句名言,“資源需求就是初始化(Resource Inquirment Is Initialization)”。

因此,我們可以將需要分配的資源在構造函數中申請完成,而在析構函數中釋放已經分配的資源,只要對象的生存期結束,對象請求分配的資源即被自動釋放。

那么就僅剩下一個問題了,如果對象本身是在自由存儲區(Free Store,也就是所謂的“堆”)中動態創建的,并由指針管理(相信你已經知道為什么了),則還是必須通過編碼顯式的調用析構函數,當然是借助指針的delete表達式。

智能指針

幸運的是,出于某些原因,C++的標準庫中至少引入了一種類型的智能指針,雖然在使用上有局限性,但是它剛好可以解決我們的這個難題,這就是標準庫中唯一的一個智能指針::std::auto_ptr。

它將指針包裝成了類,并且重載了反引用(dereference)運算符operator *和成員選擇運算符operator ->,以模仿指針的行為。關于auto_ptr的具體細節,參閱《The C++ Standard Library》(中譯本:C++標準庫)。

例如以下代碼,

#include <cstring>
#include <memory>
#include <iostream>
class string
{
public:
string(const char* cstr) { _data=new char [ strlen(cstr)+1 ]; strcpy(_data, cstr); }
~string() { delete [] _data; }
const char* c_str() const { return _data; }
private:
char* _data;
};
void foo()
{
::std::auto_ptr <string> str ( new string( " hello " ) );
::std::cout << str->c_str() << ::std::endl;
}

由于str是函數的局部對象,因此在函數退出點生存期結束,此時auto_ptr的析構函數調用,自動銷毀內部指針維護的string對象(先前在構造函數中通過new表達式分配而來的),并進而執行string的析構函數,釋放為實際的字符串動態申請的內存。在string中也可能管理其他類型的資源,如用于多線程環境下的同步資源。下圖說明了上面的過程。

現在我們擁有了最簡單的垃圾回收機制(我隱瞞了一點,在string中,你仍然需要自己編碼控制對象的動態創建和銷毀,但是這種情況下的準則極其簡單,就是在構造函數中分配資源,在析構函數中釋放資源,就好像飛機駕駛員必須在起飛后和降落前檢查起落架一樣。),即使在foo函數中發生了異常,str的生存期也會結束,C++保證自然退出時發生的一切在異常發生時一樣會有效。

auto_ptr只是智能指針的一種,它的復制行為提供了所有權轉移的語義,即智能指針在復制時將對內部維護的實際指針的所有權進行了轉移,例如:

auto_ptr <string> str1( new string( <str1> ) );
cout << str1->c_str();
auto_ptr <string> str2(str1); // str1內部指針不再指向原來的對象
cout << str2->c_str();
cout << str1->c_str(); // 未定義,str1內部指針不再有效

某些時候,需要共享同一個對象,此時auto_ptr就不敷使用,由于某些歷史的原因,C++的標準庫中并沒有提供其他形式的智能指針,走投無路了嗎?

另一種智能指針

但是我們可以自己制作另一種形式的智能指針,也就是具有值復制語義的,并且共享值的智能指針。

需要同一個類的多個對象同時擁有一個對象的拷貝時,我們可以使用引用計數(Reference Counting/Using Counting)來實現,曾經這是一個C++中為了提高效率與COW(copy on write,改寫時復制)技術一起被廣泛使用的技術,后來證明在多線程應用中,COW為了保證行為的正確反而導致了效率降低(Herb Shutter的在C++ Report雜志中的Guru專欄以及整理后出版的《More Exceptional C++》中專門討論了這個問題)。

然而對于我們目前的問題,引用計數本身并不會有太大的問題,因為沒有牽涉到復制問題,為了保證多線程環境下的正確,并不需要過多的效率犧牲,但是為了簡化問題,這里忽略了對于多線程安全的考慮。

首先我們仿造auto_ptr設計了一個類模板(出自Herb Shutter的《More Execptional C++》),

template <typename T>
class shared_ptr
{
private:
class implement // 實現類,引用計數
{
public:
implement(T* pp):p(pp),refs(1){}
~implement(){delete p;}
T* p; // 實際指針
size_t refs; // 引用計數
};
implement* _impl;
public:
explicit shared_ptr(T* p)
: _impl(new implement(p)){}
~shared_ptr()
{
decrease(); // 計數遞減
}
shared_ptr(const shared_ptr& rhs)
: _impl(rhs._impl)
{
increase(); // 計數遞增
}
shared_ptr& operator=(const shared_ptr& rhs)
{
if (_impl != rhs._impl) // 避免自賦值
{
decrease(); // 計數遞減,不再共享原對象
_impl=rhs._impl; // 共享新的對象
increase(); // 計數遞增,維護正確的引用計數值
}
return *this;
}
T* operator->() const
{
return _impl->p;
}
T& operator*() const
{
return *(_impl->p);
}
private:
void decrease()
{
if (--(_impl->refs)==0)
{ // 不再被共享,銷毀對象
delete _impl;
}
}
void increase()
{
++(_impl->refs);
}
};

這個類模板是如此的簡單,所以都不需要對代碼進行太多地說明。這里僅僅給出一個簡單的使用實例,足以說明shared_ptr作為簡單的垃圾回收器的替代品。

void foo1(shared_ptr <int>& val)
{
shared_ptr <int> temp(val);
*temp=300;
}
void foo2(shared_ptr <int>& val)
{
val=shared_ptr <int> ( new int(200) );
}
int main()
{
shared_ptr <int> val(new int(100));
cout<<"val="<<*val;
foo1(val);
cout<<"val="<<*val;
foo2(val);
cout<<"val="<<*val;
}

在main()函數中,先調用foo1(val),函數中使用了一個局部對象temp,它和val共享同一份數據,并修改了實際值,函數返回后,val擁有的值同樣也發生了變化,而實際上val本身并沒有修改過。

然后調用了foo2(val),函數中使用了一個無名的臨時對象創建了一個新值,使用賦值表達式修改了val,同時val和臨時對象擁有同一個值,函數返回時,val仍然擁有這正確的值。

最后,在整個過程中,除了在使用shared_ptr 的構造函數時使用了new表達式創建新之外,并沒有任何刪除指針的動作,但是所有的內存管理均正確無誤,這就是得益于shared_ptr的精巧的設計。

擁有了auto_ptr和shared_ptr兩大利器以后,應該足以應付大多數情況下的垃圾回收了,如果你需要更復雜語義(主要是指復制時的語義)的智能指針,可以參考boost的源代碼,其中設計了多種類型的智能指針。

標準容器

對于需要在程序中擁有相同類型的多個對象,善用標準庫提供的各種容器類,可以最大限度的杜絕顯式的內存管理,然而標準容器并不適用于儲存指針,這樣對于多態性的支持仍然面臨困境。

使用智能指針作為容器的元素類型,然而標準容器和算法大多數需要值復制語義的元素,前面介紹的轉移所有權的auto_ptr和自制的共享對象的shared_ptr都不能提供正確的值復制語義,Herb Sutter在《More Execptional C++》中設計了一個具有完全復制語義的智能指針ValuePtr,解決了指針用于標準容器的問題。

然而,多態性仍然沒有解決,我將在另一篇文章專門介紹使用容器管理多態對象的問題。

語言支持

為什么不在C++語言中增加對垃圾回收的支持?

根據前面的討論,我們可以看見,不同的應用環境,也許需要不同的垃圾回收器,不管三七二十一使用垃圾回收,需要將這些不同類型的垃圾回收器整合在一起,即使可以成功(對此我感到懷疑),也會導致效率成本的增加。

這違反了C++的設計哲學,“不為不必要的功能支付代價”,強迫用戶接受垃圾回收的代價并不可取。

相反,按需選擇你自己需要的垃圾回收器,需要掌握的規則與顯式的管理內存相比,簡單的多,也不容易出錯。

最關鍵的一點, C++并不是“傻瓜型”的編程語言,他青睞喜歡和善于思考的編程者,設計一個合適自己需要的垃圾回收器,正是對喜愛C++的程序員的一種挑戰。

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2016-12-01 11:20:42

2017-03-03 09:26:48

PHP垃圾回收機制

2010-09-25 15:33:19

JVM垃圾回收

2017-08-17 15:40:08

大數據Python垃圾回收機制

2009-06-23 14:15:00

Java垃圾回收

2021-11-05 15:23:20

JVM回收算法

2011-07-04 16:48:56

JAVA垃圾回收機制GC

2010-09-16 15:10:24

JVM垃圾回收機制

2021-05-27 21:47:12

Python垃圾回收

2010-09-25 15:26:12

JVM垃圾回收

2015-06-04 09:38:39

Java垃圾回收機

2017-06-12 17:38:32

Python垃圾回收引用

2011-06-28 12:39:34

Java垃圾回收

2011-06-28 10:19:40

C#開發

2010-10-13 10:24:38

垃圾回收機制JVMJava

2009-12-09 17:28:34

PHP垃圾回收機制

2021-12-07 08:01:33

Javascript 垃圾回收機制前端

2011-12-26 09:50:05

.NET垃圾回收

2010-09-26 11:22:22

JVM垃圾回收JVM

2024-02-22 17:15:22

JS垃圾回收機制
點贊
收藏

51CTO技術棧公眾號

国产一区二区精品久久91| 红桃成人av在线播放| 亚洲一卡二卡三卡四卡五卡| 99re6在线| 日韩三级视频在线| 日韩精选在线| 欧美日韩一区二区三区高清| xxxxxx在线观看| 熟妇高潮一区二区高潮| 日韩电影在线一区二区三区| 久久精品国产欧美亚洲人人爽| 风韵丰满熟妇啪啪区老熟熟女| 日韩电影毛片| 中文字幕在线观看一区| 国产欧美日韩在线播放| 国产在线观看第一页| 欧美永久精品| 国产一区二区三区在线视频| 成年人性生活视频| 欧美黑人疯狂性受xxxxx野外| 综合久久综合久久| 蜜桃视频在线观看91| 91成人国产综合久久精品| 亚洲每日在线| 免费97视频在线精品国自产拍| 一区二区三区免费在线观看视频| 爱情电影网av一区二区| 一本大道久久a久久综合| 欧美日韩dvd| 国产黄在线看| 不卡一区二区在线| 91色在线视频| 中文字幕乱码视频| 国产精品一区毛片| 欧美精品久久久久久久免费观看| 91成人免费观看| 欧美综合77777色婷婷| 国产99久一区二区三区a片 | h片视频在线观看| 欧美国产在线观看| 麻豆成人在线播放| 亚洲国产999| 狠狠色狠狠色综合日日91app| 欧美在线日韩在线| 国产第100页| 欧美成人69| www.午夜精品| 国产aaaaaaaaa| 欧美美女在线| 亚洲欧美日韩中文视频| 色婷婷精品久久二区二区密| 51亚洲精品| 欧美大片国产精品| 永久免费看片在线观看| 日本欧美在线| 欧美高清一级片在线| 黄色永久免费网站| 成人18视频在线观看| 色久综合一二码| 农村妇女精品一二区| 亚洲精品福利电影| 日本黄色免费在线| 国产高清精品网站| 91免费版网站在线观看| 国产美女永久免费| 国产在线观看免费一区| 91丝袜美腿美女视频网站| 亚洲中文字幕在线一区| 精品一区二区影视| 亚洲自拍偷拍第一页| 99久久亚洲精品日本无码| 国产乱对白刺激视频不卡| 亚洲资源在线看| xxxx18国产| 不卡的看片网站| 免费看成人av| 成人在线免费视频| 国产精品国产三级国产aⅴ入口| 中文字幕中文字幕99| 国产在线高清视频| 一区二区久久久久| www.99热这里只有精品| 涩涩涩在线视频| 欧美性感一区二区三区| 欧美一级xxxx| 超碰成人97| 亚洲欧美中文在线视频| 97精品在线播放| 国产综合精品| 国产999视频| 国产精品-色哟哟| 成人美女视频在线看| 蜜桃久久精品乱码一区二区| 精品国产丝袜高跟鞋| 一卡二卡欧美日韩| 成人免费毛片播放| 国产日韩一区二区三免费高清| 亚洲国产天堂久久国产91| 一本加勒比北条麻妃| 国产精品福利在线观看播放| 久久久久久中文| 中文字幕你懂的| 成人午夜av电影| 亚洲国产日韩欧美| 成人女同在线观看| 欧美日韩1区2区| 亚洲男人在线天堂| 99re6这里只有精品| 久久久人成影片一区二区三区| 超碰在线观看91| 成人教育av在线| 亚洲精品乱码久久久久久蜜桃91| gratisvideos另类灌满| 欧美日韩国产美女| 中文字幕丰满孑伦无码专区| 亚洲综合婷婷| 国产精品久久久久久久9999| 丰满人妻一区二区| 国产精品久久久久影视| 一区二区传媒有限公司| 欧美高清hd| 搡老女人一区二区三区视频tv| 亚洲第一在线播放| 国产成人8x视频一区二区| 亚洲视频在线观看日本a| 最新欧美色图| 欧美精品一区二区三区蜜桃| 欧美做爰爽爽爽爽爽爽| 日本成人中文字幕在线视频| 久久久www免费人成黑人精品| av免费在线网站| 欧美日韩精品一区二区三区蜜桃 | 四虎国产精品免费久久5151| 日韩精品高清在线观看| 妺妺窝人体色www聚色窝仙踪 | 精品视频三区| 午夜激情久久久| 少妇极品熟妇人妻无码| 亚洲精品a级片| 国产日韩亚洲欧美| av男人的天堂在线| 欧美偷拍一区二区| 欧美特级黄色录像| 久久久久久黄| 欧美亚洲丝袜| 韩国美女久久| 亚洲男女自偷自拍图片另类| 日韩女同强女同hd| 成人h动漫精品| 黄色一级视频在线播放| 动漫av一区| 国内久久久精品| 成人爽a毛片一区二区| 亚洲一区二区三区自拍| 中文字幕在线观看视频www| 欧美激情1区| 国产91色在线|亚洲| 色操视频在线| 亚洲第一av在线| 日韩精品一区二区不卡| 不卡av在线免费观看| 欧美日韩性生活片| 天天久久夜夜| 国产精品96久久久久久| 午夜看片在线免费| 91麻豆精品国产自产在线 | 欧美日韩中文字幕日韩欧美| 好吊一区二区三区视频| 久久人人超碰| 视频一区二区三| 欧美性www| 欧美精品一区在线播放| 欧美一级视频免费| 疯狂蹂躏欧美一区二区精品| 人妻少妇无码精品视频区| 美女网站一区二区| 日本一道在线观看| 久久成人福利| 国产精品99久久久久久www| 香蕉视频免费在线播放| 欧美一区二区三区视频免费| 日本在线视频免费观看| 国产网站一区二区三区| 伊人色在线视频| 激情综合在线| 日韩免费电影一区二区| 国产精品一区三区在线观看| 久久久免费电影| 精品视频二区| 日韩欧美一级片| 无码人妻av免费一区二区三区| 国产精品久久国产精麻豆99网站| 国模大尺度视频| 老司机精品视频网站| 正在播放精油久久| 久久视频在线观看| 国产精品久久久久久久app| 手机电影在线观看| 亚洲另类xxxx| 国产女人18毛片水真多| 欧美日韩国产一区中文午夜| 国产一区二区三区视频播放| 不卡的av在线| 亚洲精品乱码久久久久久动漫| av成人国产| 18视频在线观看娇喘| 五月综合久久| 91精品国产91久久久久青草| 免费日韩电影| 欧美国产亚洲精品久久久8v| аⅴ资源新版在线天堂| 欧美va日韩va| 岳乳丰满一区二区三区| 亚洲v中文字幕| 波多野结衣家庭教师| 久久久久久99精品| 人妻换人妻a片爽麻豆| 久久精品国产99国产精品| 国产精品宾馆在线精品酒店| 欧美国产高潮xxxx1819| 亚洲午夜精品福利| 九一亚洲精品| 国内精品一区二区| 亚洲不卡视频| 国产中文字幕日韩| 午夜av成人| 午夜精品久久久久久久99热| av在线导航| 精品国产一区二区三区久久狼5月| 欧美视频综合| 亚洲精品久久久一区二区三区 | 成人精品高清在线视频| 97视频在线观看视频免费视频| 91网在线看| 久久伊人精品一区二区三区| av在线三区| 国产香蕉一区二区三区在线视频 | 在线亚洲国产精品网| 日韩电影免费| 日韩av有码在线| 婷婷综合激情网| 亚洲精品理论电影| 香蕉视频国产在线| 日韩av在线免费| 涩涩视频免费看| 亚洲丁香婷深爱综合| 欧美自拍第一页| 亚洲国产精品网站| 天堂网在线观看视频| 亚洲精品国产品国语在线| 欧美一区二区三区黄片| 日韩精品在线视频| 视频一区二区在线播放| 国产偷国产偷亚洲清高网站| 久久99久久久久久久久久久| 精品久久精品久久| 国产精品久久久久av蜜臀| 国产精品久久久久久久久久久久冷 | 中文字幕巨乱亚洲| 久久久视频6r| 欧美国产乱子伦| 三级黄色在线观看| 亚洲精品精品亚洲| 久久久久久天堂| 精品日韩美女的视频高清| 国产精品视频免费播放| 91黄色小视频| 一区二区三区播放| 欧美伊人久久久久久午夜久久久久| 国产精品午夜一区二区| 欧美日韩专区在线| 国产视频第一页| 欧美精品一区二区三区四区 | 久久精品福利视频| 综合图区亚洲| 欧美在线国产精品| 国产精品99久久久久久董美香| 91久久久久久久久久| 97色成人综合网站| 欧美日韩国产免费一区二区三区| 不卡中文字幕| 免费人成自慰网站| 视频一区免费在线观看| 中文 日韩 欧美| 97se亚洲国产综合在线| 欧美日韩生活片| 亚洲一区二区在线免费看| 91video| 欧美久久久久久蜜桃| 理论片中文字幕| 亚洲网站在线观看| 日韩123区| 国产精品久久久久91| 深夜激情久久| 视频一区免费观看| 好看的日韩av电影| 在线观看高清免费视频| 粉嫩av亚洲一区二区图片| 小早川怜子久久精品中文字幕| 亚洲日本在线a| 伊人中文字幕在线观看| 欧美一区二区精品在线| 邻家有女韩剧在线观看国语| 欧美另类99xxxxx| 欧美aaa视频| 国产一区免费在线| 国产韩日影视精品| 99草草国产熟女视频在线| 国产91精品久久久久久久网曝门 | 亚洲综合在线一区二区| www国产成人免费观看视频 深夜成人网| 国产精品久久国产精麻豆96堂| 激情成人在线视频| 国内精品久久久久久久久久久| 国产一区二区三区日韩欧美| 黑森林国产精品av| 91影院在线免费观看视频| 精品国产一区二区三区久久久樱花 | chinese偷拍一区二区三区| 久久久久久久久国产| 亚洲欧洲一二区| 视频在线精品一区| 性高湖久久久久久久久| 国产免费a级片| 亚洲欧美日韩一区二区| 中文字幕在线观看免费| 亚洲色图50p| 国产在线精彩视频| 国产精品v欧美精品∨日韩| 久久精品亚洲欧美日韩精品中文字幕| 久久久久久香蕉| 久久这里都是精品| 91香蕉在线视频| 精品免费日韩av| 日本欧美电影在线观看| 91精品免费视频| 我不卡影院28| av噜噜在线观看| 自拍偷拍国产精品| 亚洲资源在线播放| 日韩中文字幕视频在线| 国产另类xxxxhd高清| 日本亚洲自拍| 日韩精品一卡二卡三卡四卡无卡| 黄色a一级视频| 日韩欧美999| 欧美成人综合在线| 国产97在线视频| 成人在线免费观看视频| 手机在线看福利| 国产精品视频第一区| 7777久久亚洲中文字幕| 亚洲欧美日韩成人| 精品网站在线| 亚洲午夜在线观看| 久久99精品久久久久久动态图 | 国产精品一级黄片| 疯狂蹂躏欧美一区二区精品| 三级做a全过程在线观看| 欧美在线亚洲在线| 欧美日韩高清| 天天干天天色天天干| 亚洲精品中文字幕乱码三区 | 成人午夜在线免费| 99热只有这里有精品| 亚洲欧美制服另类日韩| 99久久er| 九九久久九九久久| 99这里只有精品| 国产一级片免费在线观看| 日韩在线中文字| 66精品视频在线观看| 99精品在线免费视频| 欧美高清在线一区| 国产农村妇女毛片精品| 久久久天堂国产精品女人| 亚洲成aⅴ人片久久青草影院| 日韩一级理论片| 亚洲精品欧美在线| 亚洲 小说区 图片区 都市| 国产精品久久不能| 欧美在线国产| 中文在线永久免费观看| 欧美视频在线观看一区二区| 亚洲www色| 欧美一区免费视频| 国产电影精品久久禁18| 国产精品久久久免费视频| 在线成人激情视频| 亚洲一区二区免费在线观看| 国产精品亚洲αv天堂无码| 亚洲欧洲日韩综合一区二区| 视频一区二区免费| 国产精品视频久久久| 一区久久精品| 岛国片在线免费观看| 亚洲精品v欧美精品v日韩精品| 精品久久在线| 黄色免费视频大全| 综合婷婷亚洲小说|