锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲愉拍自拍另类高清精品,欧美精品性视频,欧美专区一区二区三区 http://www.shnenglu.com/vczh/archive/2014/03/01/205998.html闄堟鐎?vczh) 闄堟鐎?vczh) Fri, 28 Feb 2014 16:34:00 GMT http://www.shnenglu.com/vczh/archive/2014/03/01/205998.html http://www.shnenglu.com/vczh/comments/205998.html http://www.shnenglu.com/vczh/archive/2014/03/01/205998.html#Feedback 1 http://www.shnenglu.com/vczh/comments/commentRss/205998.html http://www.shnenglu.com/vczh/services/trackbacks/205998.html 鏈榪戝涔燙++11鐨剉ariadic template argument錛岀粓浜庡彲浠ユ憜鑴辯敤fpmacro妯℃澘鏉ュ鍒朵竴澶у爢浠g爜鐨勫仛娉曚簡錛屽ソ寮蹇冦傝繖涓緥瀛愮殑main鍑芥暟鐢╨ambda鍐欎簡涓涓枑娉㈤偅濂戞暟鍒楃殑閫掑綊璁$畻鍑芥暟銆傝窡浠ュ線涓嶅悓鐨勬槸錛屽湪Y鍑芥暟鐨勫府鍔╀笅錛岃繖涓猯ambda琛ㄨ揪鏄彲浠ユ垚鍔熺湅鍒拌嚜宸憋紝鐒跺悗閫掑綊璋冪敤銆傚綋鐒惰繖浠嶇劧闇瑕佺敤鏅氱殑C++閫掑綊鏉ュ疄鐜幫紝騫朵笉鏄?calculus閭d釜楂樺ぇ涓婄殑Y Combinator銆?
聽
#include
<functional>
#include
<memory>
#include
<iostream>
#include
<string>
聽
using
namespace std;
聽
template<typename
TResult, typename ...TArgs>
class
YBuilder
{
private:
聽聽聽聽function<TResult(function<TResult(TArgs...)>, TArgs...)> partialLambda;
聽
public:
聽聽聽聽YBuilder(function<TResult(function<TResult(TArgs...)>, TArgs...)> _partialLambda)
聽聽聽聽聽聽聽聽:partialLambda(_partialLambda)
聽聽聽聽{
聽聽聽聽}
聽
聽聽聽聽TResult operator()(TArgs ...args)const
聽聽聽聽{
聽聽聽聽聽聽聽聽return partialLambda(
聽聽聽聽聽聽聽聽聽聽聽聽[this](TArgs ...args)
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return
this->operator()(args...);
聽聽聽聽聽聽聽聽聽聽聽聽}, args...);
聽聽聽聽}
};
聽
template<typename
TMethod>
struct
PartialLambdaTypeRetriver
{
聽聽聽聽typedef
void
FunctionType;
聽聽聽聽typedef
void
LambdaType;
聽聽聽聽typedef
void
YBuilderType;
};
聽
template<typename
TClass, typename
TResult, typename ...TArgs>
struct
PartialLambdaTypeRetriver<TResult(__thiscall
TClass::*)(function<TResult(TArgs...)>, TArgs...)>
{
聽聽聽聽typedef
TResult
FunctionType(TArgs...);
聽聽聽聽typedef
TResult
LambdaType(function<TResult(TArgs...)>, TArgs...);
聽聽聽聽typedef
YBuilder<TResult, TArgs...> YBuilderType;
};
聽
template<typename
TClass, typename
TResult, typename ...TArgs>
struct
PartialLambdaTypeRetriver<TResult(__thiscall
TClass::*)(function<TResult(TArgs...)>, TArgs...)const>
{
聽聽聽聽typedef
TResult
FunctionType(TArgs...);
聽聽聽聽typedef
TResult
LambdaType(function<TResult(TArgs...)>, TArgs...);
聽聽聽聽typedef
YBuilder<TResult, TArgs...> YBuilderType;
};
聽
template<typename
TLambda>
function<typename
PartialLambdaTypeRetriver<decltype(&TLambda::operator())>::FunctionType> Y(TLambda
partialLambda)
{
聽聽聽聽return
typename
PartialLambdaTypeRetriver<decltype(&TLambda::operator())>::YBuilderType(partialLambda);
}
聽
int
_tmain(int
argc, _TCHAR* argv[])
{
聽聽聽聽auto fib = Y([](function<int(int)> self, int
index)
聽聽聽聽{
聽聽聽聽聽聽聽聽return
index<2
聽聽聽聽聽聽聽聽聽聽聽聽?1
聽聽聽聽聽聽聽聽聽聽聽聽:self(index-1)+self(index-2);
聽聽聽聽});
聽
聽聽聽聽for (int i = 0; i < 10; i++)
聽聽聽聽{
聽聽聽聽聽聽聽聽cout << fib(i) << " ";
聽聽聽聽}
聽聽聽聽cout << endl;
}
]]>C++瀹炵敤鎶宸т箣閰嶇疆Visual C++鐨勮皟璇曞櫒鏄劇ず鏁版嵁緇撴瀯鐨勬牸寮忥紙闄刅czh Library++閰嶇疆鏂囦歡錛?/title> http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html闄堟鐎?vczh) 闄堟鐎?vczh) Thu, 21 Mar 2013 03:55:00 GMT http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html http://www.shnenglu.com/vczh/comments/198665.html http://www.shnenglu.com/vczh/archive/2013/03/21/198665.html#Feedback 4 http://www.shnenglu.com/vczh/comments/commentRss/198665.html http://www.shnenglu.com/vczh/services/trackbacks/198665.html 浠婂ぉ鎴戝啓浜嗕竴涓粰Visual C++鐢ㄧ殑閰嶇疆錛岀敤鏉ヨVC++鍦ㄦ樉紺鴻嚜宸卞啓鐨勫瓧絎︿覆鍜屽鍣ㄧ瓑璁炬柦鍙樺緱璺熸樉紺篠TL涓鏍鋒紓浜俈C++鐨勫彲閰嶇疆鍨嬭繕鏄緢楂樼殑錛屾垜浠彧瑕佸啓涓涓獂ml錛屽氨鍙互鏀瑰彉璋冭瘯鍣ㄥ鑷繁鐨勬暟鎹粨鏋勭殑鏄劇ず浜?
鍦ㄨ繖閲屾垜綆鍗曞湴浠嬬粛涓涓嬬敤娉曘傚亣璁懼ぇ瀹惰寰梫lpp錛圴czh Library++錛屼篃灝辨槸GacUI鐢ㄧ殑閭d釜搴擄級鐨刉String鍟奓ist榪欎簺涓滆タ鍦ㄨ皟璇曞櫒閲岄潰鏄劇ず鍑烘潵鐨勪笢瑗垮お涓戯紝灝卞彲浠ョ敤浠ヤ笅涓夋鏉ヤ慨鏀瑰畠銆?/p>
1錛氬幓http://gac.codeplex.com/SourceControl/changeset/view/99419#2395529 涓嬭澆鎴戝啓鐨勯偅涓猲atvis鏂囦歡銆傝繖涓枃浠跺湪鏁翠釜zip鍖呴噷闈㈢殑浣嶇疆鏄疌ommon\vlpp.natvis 2錛氭妸榪欎釜鏂囦歡澶嶅埗鍒癈:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers錛堝鏋滀嬌鐢ㄩ粯璁ゅ畨瑁呰礬寰勭殑璇濓級 3錛氶噸鍚綘鏈鍠滅埍鐨刅isual Studio 2012錛屽氨鍙互鐪嬪埌涓嬮潰鐨勪笢瑗夸簡錛?/p>
絀虹殑鏅鴻兘鎸囬拡
鏈変笢瑗跨殑鏅鴻兘鎸囬拡
鏈夊唴瀹圭殑“鎯版ц綆?#8221;綾?/p>
鏈夊唴瀹逛絾鏄繕娌¤綆楃殑“鎯版ц綆?#8221;綾?/p>
娌″唴瀹圭殑“鎯版ц綆?#8221;綾?/p>
鏂伴矞鐑荊鐨勫鍣?/p>
鏂伴矞鐑荊鐨勬槧灝?/p>
灝辮繛涓瀵瑰鐨勬槧灝勪篃鏄姝ょ殑鏂伴矞鐑荊
List<Nullable<vint>>鐨勪簰鐩稿祵濂椾篃鏄姝ょ殑瀹岀編
濡傛灉澶у鎯沖啓鑷繁鐨凜ustomized Visualizer鐨勮瘽錛屽彲浠ュ幓鍙傝冨井杞壇蹇冩彁渚涚殑鏂囨。http://msdn.microsoft.com/en-us/library/vstudio/jj620914.aspx 錛岀劧鍚庢寜鐓т笂闈㈢殑姝ラ鍐欒嚜宸辯殑natvis鏂囦歡銆傚湪榪欓噷鎴戞妸鎴戠殑natvis璐翠笂鏉ワ紝浠ヤ緵鍙傝冿細
<? xml version="1.0" encoding="utf-8" ?>
< AutoVisualizer xmlns ="http://schemas.microsoft.com/vstudio/debugger/natvis/2010" >
< Type Name ="vl::ObjectString<wchar_t>" >
< DisplayString > {{ size={length}, buffer={buffer+start,su} }}</ DisplayString >
< StringView > buffer+start,su</ StringView >
< Expand >
< Item Name ="[size]" > length</ Item >
< ArrayItems >
< Size > length</ Size >
< ValuePointer > buffer+start</ ValuePointer >
</ ArrayItems >
</ Expand >
</ Type >
< Type Name ="vl::ObjectString<char>" >
< DisplayString > {{ size={length}, buffer={buffer+start,s} }}</ DisplayString >
< StringView > buffer+start,s</ StringView >
< Expand >
< Item Name ="[size]" > length</ Item >
< ArrayItems >
< Size > length</ Size >
< ValuePointer > buffer+start</ ValuePointer >
</ ArrayItems >
</ Expand >
</ Type >
< Type Name ="vl::collections::List<*,*>" >
< AlternativeType Name ="vl::collections::SortedList<*,*>" />
< AlternativeType Name ="vl::collections::Array<*,*>" />
< DisplayString > {{ size={count} }}</ DisplayString >
< Expand >
< Item Name ="[size]" > count</ Item >
< ArrayItems >
< Size > count</ Size >
< ValuePointer > buffer</ ValuePointer >
</ ArrayItems >
</ Expand >
</ Type >
< Type Name ="vl::collections::Dictionary<*,*,*,*>" >
< AlternativeType Name ="vl::collections::Group<*,*,*,*>" />
< DisplayString > {{ size={keys.count} }}</ DisplayString >
< Expand >
< Item Name ="[size]" > keys.count</ Item >
< Item Name ="Keys" > keys</ Item >
< Item Name ="Values" > values</ Item >
</ Expand >
</ Type >
< Type Name ="vl::Ptr<*>" >
< AlternativeType Name ="vl::ComPtr<*>" />
< DisplayString Condition ="reference == 0" > [empty]</ DisplayString >
< DisplayString Condition ="reference != 0" > {*reference}</ DisplayString >
< Expand >
< Item Condition ="reference != 0" Name ="[ptr]" > reference</ Item >
</ Expand >
</ Type >
< Type Name ="vl::Lazy<*>" >
< DisplayString Condition ="internalValue.reference == 0" > [empty]</ DisplayString >
< DisplayString Condition ="internalValue.reference != 0 && internalValue.reference->evaluated == false" > [not evaluated]</ DisplayString >
< DisplayString Condition ="internalValue.reference != 0 && internalValue.reference->evaluated == true" > {internalValue.reference->value}</ DisplayString >
< Expand >
< Item Condition ="internalValue.reference != 0 && internalValue.reference->evaluated == true" Name ="[value]" > internalValue.reference->value</ Item >
</ Expand >
</ Type >
< Type Name ="vl::ObjectBox<*>" >
< DisplayString > {object}</ DisplayString >
< Expand >
< ExpandedItem > object</ ExpandedItem >
</ Expand >
</ Type >
< Type Name ="vl::Nullable<*>" >
< DisplayString Condition ="object == 0" > [empty]</ DisplayString >
< DisplayString Condition ="object != 0" > {*object}</ DisplayString >
< Expand >
< ExpandedItem Condition ="object != 0" > *object</ ExpandedItem >
</ Expand >
</ Type >
</ AutoVisualizer > ]]> 浣跨敤VisualStudio瀹屾垚鑷姩鍖朇++浠g爜鐢熸垚鍜岀紪璇戝伐浣滐紙GacUI錛?/title> http://www.shnenglu.com/vczh/archive/2012/01/14/164167.html闄堟鐎?vczh) 闄堟鐎?vczh) Sat, 14 Jan 2012 06:09:00 GMT http://www.shnenglu.com/vczh/archive/2012/01/14/164167.html http://www.shnenglu.com/vczh/comments/164167.html http://www.shnenglu.com/vczh/archive/2012/01/14/164167.html#Feedback 7 http://www.shnenglu.com/vczh/comments/commentRss/164167.html http://www.shnenglu.com/vczh/services/trackbacks/164167.html GacUI緇堜簬榪涘叆鍒朵綔dll鐨勯樁孌典簡銆傛槰澶╀笂浼犱簡涓涓柊鐨勫伐紼嬶紝鍦?a style="text-decoration: underline" target="_blank">Vczh Library++3.0錛圗:\Codeplex\vlpp\Workspace\Tools\Release\SideProjects\GacUI\GacUI.sln錛夈傝繖閲岄潰涓鍏辨湁涓変釜宸ョ▼錛屾湁涓や釜鏄伐鍏鳳紝涓涓槸dll銆?br /> 涓轟簡緙栬瘧鍑哄甫鍙嶅皠鐨勬帶浠跺簱錛屽洜姝ゆ瘡涓涓帶浠墮兘鍙互鑾峰緱涓涓狪TypeDescriptor瀵硅薄銆備絾鏄帶浠跺簱涓鍏辨湁鍑犲崄涓被涓婂崈涓嚱鏁幫紝鎴戜笉鍙兘涓涓竴涓幓瀹炵幇鐨勶紙璇鋒兂鎯沖疄鐜癐Dispatcher鐨勬椂鍊欙級銆傛牴鎹?a style="text-decoration: underline" href="http://www.shnenglu.com/vczh/archive/2012/01/11/164003.html" target="_blank">涓婁竴綃囧崥瀹?/a>璁ㄨ榪囨妧鏈紝鎴戝皢浣跨敤涓涓▼搴忔潵璇籶db鐢熸垚C++浠g爜銆傝緇嗙殑璁″垝濡備笅錛?br /> 1錛氬埗浣滀竴涓猒GacPDB宸ョ▼銆傝繖鏄竴涓猠xe錛屼絾鏄槸娌$敤鐨勶紝鍞竴鐨勭敤澶勫氨鏄粬寮曠敤浜咷acUI.dll鎵闇瑕佺殑鎵鏈夋簮浠g爜錛岀劧鍚庨潬緙栬瘧鍣ㄤ駭鐢烶DB鏂囦歡銆?br /> 2錛氬埗浣滀竴涓猒TranslatePDBtoXML宸ョ▼銆傝繖鏄竴涓猠xe錛屼粠PDB鎶藉彇綾誨0鏄庛?br /> 3錛氬埗浣滀竴涓猒TranslateXMltoCode銆傞【鍚嶆濅箟錛屼笉榪囩幇鍦ㄨ繕娌″仛錛屽師鐞嗘槸涓鏍風殑銆?br /> 4錛欸acUI.dll銆傝繖涓猟ll鍖呭惈浜嗘墍鏈夌殑鎺т歡鐨勫疄鐜幫紝榪樻湁_TranslateXMLtoCode浜х敓鐨勬墍鏈変唬鐮併?br /> 鐜板湪鎴戠殑鐩爣鏄紝鍏堢紪璇慱Translate*宸ョ▼錛岀劧鍚庣紪璇慱GacPDB浜х敓pdb鍚庤嚜鍔ㄨ皟鐢ㄥ畠浠紝鐢熸垚浠g爜緇撴潫涔嬪悗寮濮嬪悎騫剁紪璇慓acUI.dll銆傛墍鏈夌殑榪欎簺涓滆タ閮介渶瑕佸湪VisualStudio鐨?#8220;Rebuild Solution”閲岄潰瀹屾垚銆備負浜嗗畬鎴愯繖涓洰鏍囷紝鎴戝垱寤鴻繖浜涘伐紼嬩箣鍚庯紝鎸夌収涓嬮潰鐨勬柟娉曚慨鏀逛簡宸ョ▼灞炴э細
1 _TranslatePDBtoXML: 2 post build action: 3 copy $(ProjectDir)msdia100.dll $(SolutionDir)$(Configuration)\msdia100.dll 4 _GenPDB: 5 references: 6 _TranslatePDBtoXML 7 post build action: 8 $(SolutionDir)$(Configuration)\_TranslatePDBtoXML.exe $(SolutionDir)Debug\_GenPDB.pdb $(SolutionDir)_GenPDB.xml 9 GacUI: 10 references: 11 _GenPDB
1錛氬伐紼婣寮曠敤浜嗗伐紼婤鐨勮瘽錛岄偅涔堝彧鏈夊綋B瀹屽叏緙栬瘧濂戒箣鍚庢墠浼氱紪璇慉銆傚洜姝や笂闈㈢殑閰嶇疆灝嗛樆姝笁涓伐紼嬪鉤琛岀紪璇戯紝寮哄埗浠栦滑鎸夌収_TranslatePDBtoXML銆乢GenPDB鍜孏acUI鐨勯『搴忔潵銆?br /> 2錛歘TranslatePDBtoXML緙栬瘧濂戒箣鍚庯紝浼氭妸瀹冧緷璧栫殑msdia100.dll澶嶅埗鍒扮紪璇戝嚭鏉ョ殑exe鏃佽竟錛屼互渚涙帴涓嬫潵璋冪敤銆?br /> 3錛歘GenPDB緙栬瘧濂戒箣鍚庯紝pdb宸茬粡浜х敓浜嗐傝繖涓椂鍊欏畠浼氳嚜鍔ㄨ皟鐢ㄤ笂涓姝ョ紪璇戝嚭鏉ョ殑_TranslatePDBtoXML錛岃鍙杙db錛岃緭鍑簒ml 4錛氾紙鎺ヤ笅鏉ヨ鍋氱殑錛夎皟鐢╛TranslateXMLtoCode錛岃緭鍏ml錛岃緭鍑篊++浠g爜 5錛氳繖涓椂鍊欙紝鐢熸垚鐨凜++浠g爜宸茬粡灝辯華浜嗭紝鎵浠ュ紑濮嬬紪璇慓acUI銆?br /> 闄勫姞鐨勫ソ澶勮繕鏈変竴涓傚洜涓篲GenPDB寮曠敤浜咷acUI鐨刢pp錛屾墍浠ュ綋GacUI鐨勬簮浠g爜淇敼鐨勬椂鍊欙紝_GenPDB涔熶細鎰熷簲鍒幫紝浠庤屽湪涓嬫緙栬瘧GacUI鐨勬椂鍊欏厛寮濮嬬紪璇慱GenPDB銆傚茍涓斿洜涓篏acUI渚濊禆浜哶GenPDB錛屾墍浠GenPDB浠嶇劧浼氬厛緙栬瘧銆傝屼笖榪欑渚濊禆鍏崇郴鏄棤瀹崇殑錛屽洜涓篲GenPDB娌℃湁杈撳嚭lib錛屽洜姝acUI.dll鍦ㄨ繍琛岀殑鏃跺欏畬鍏ㄤ笉闇瑕乢GenPDB.exe鐨勫瓨鍦ㄣ?br /> 濂戒簡銆傞偅鎶婁竴涓釜鐨刢pp鏂囦歡娣誨姞鍒癬GenPDB涔熸槸鍦ㄥお楹葷儲浜嗭紝鎵浠ユ垜鎶曟満鍙栧閥浜嗕竴涓嬶細
1 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\GuiApplication.cpp " 2 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\GuiBasicControls.cpp " 3 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\GuiListControls.cpp " 4 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\GuiTextControls.cpp " 5 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\GuiWindowControls.cpp " 6 // --------------------------------------------------------------- 7 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\ExtendedControls\GuiComboControls.cpp " 8 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\ExtendedControls\GuiContainerControls.cpp " 9 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\ExtendedControls\GuiListViewControls.cpp " 10 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\ExtendedControls\GuiMenuControls.cpp " 11 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\ExtendedControls\GuiTextListControls.cpp " 12 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\ExtendedControls\GuiTreeViewControls.cpp " 13 // --------------------------------------------------------------- 14 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\Styles\GuiCommonStyles.cpp " 15 #include " ..\..\..\..\..\Candidate\GUI\GUI\Controls\Styles\GuiWin7Styles.cpp " 16 // --------------------------------------------------------------- 17 #include " ..\..\..\..\..\Candidate\GUI\GUI\GraphicsElement\GuiGraphicsComposition.cpp " 18 #include " ..\..\..\..\..\Candidate\GUI\GUI\GraphicsElement\GuiGraphicsElement.cpp " 19 #include " ..\..\..\..\..\Candidate\GUI\GUI\GraphicsElement\GuiGraphicsEventReceiver.cpp " 20 #include " ..\..\..\..\..\Candidate\GUI\GUI\GraphicsElement\GuiGraphicsHost.cpp " 21 #include " ..\..\..\..\..\Candidate\GUI\GUI\GraphicsElement\GuiGraphicsTextElement.cpp " 22 // --------------------------------------------------------------- 23 #include " ..\..\..\..\..\Candidate\GUI\GUI\NativeWindow\GuiNativeWindow.cpp " 24 #include " ..\..\..\..\..\Candidate\GUI\GUI\NativeWindow\Windows\WinNativeWindow.cpp " 25 // --------------------------------------------------------------- 26 #include " ..\..\..\..\..\Candidate\GUI\GUI\Reflection\GuiTypeDescriptor.cpp " 27 // --------------------------------------------------------------- 28 #include " ..\..\..\..\..\Library\Basic.cpp " 29 #include " ..\..\..\..\..\Library\Exception.cpp " 30 #include " ..\..\..\..\..\Library\String.cpp " 31 #include " ..\..\..\..\..\Library\Threading.cpp " 32 #include " ..\..\..\..\..\Library\Collections\Operation.cpp " 33 // --------------------------------------------------------------- 34 #include < Windows.h > 35 36 int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow) 37 { 38 return 0 ; 39 }
鍟婂搱鍝堝搱鍝堬紙鎷栬蛋 VisualStudio鐨勫姛鑳芥槸寮哄ぇ鐨勩傚彧瑕佸杽浜庝嬌鐢紝鎴栬呴厤鍚圡SBuild錛屾墍璧峰埌鐨勫▉鍔涘皢姣笉浜氫簬鏌愪簺钁楀悕宸ュ叿閾俱傝屼笖VisualStudio緙栬瘧鍣ㄤ駭鐢熺殑鏂囦歡錛屽熀鏈笂VisualStudio閮芥湁鎻愪緵API渚涗綘闃呰錛屾墍浠ヤ篃鍙互鍋氬緢澶氫簨鎯咃紝璀鎴戣繖綃囨枃绔犺鐨勮繖鏍鳳紝鍏呭綋浜嗕竴涓紪璇戝櫒鐨勬墿灞曪紝鑰屼笖瀹岀編闆嗘垚銆?img src ="http://www.shnenglu.com/vczh/aggbug/164167.html" width = "1" height = "1" /> ]]> C++瀹炵敤鎶宸э紙鍥涳級 http://www.shnenglu.com/vczh/archive/2010/06/27/118829.html闄堟鐎?vczh) 闄堟鐎?vczh) Sun, 27 Jun 2010 12:19:00 GMT http://www.shnenglu.com/vczh/archive/2010/06/27/118829.html http://www.shnenglu.com/vczh/comments/118829.html http://www.shnenglu.com/vczh/archive/2010/06/27/118829.html#Feedback 16 http://www.shnenglu.com/vczh/comments/commentRss/118829.html http://www.shnenglu.com/vczh/services/trackbacks/118829.html Vczh Library++3.0琚垜鎼炲緱寰堢璋便備負浜嗗紑鍙戠淮鎶ょ殑閬嶅巻銆佸噺灝戠矖蹇冪姱涓嬬殑閿欒浠ュ強澧炲己鍗曞厓嫻嬭瘯銆佸洖褰掓祴璇曞拰嫻嬭瘯宸ュ叿錛屽洜姝よ褰曚笅涓浜涘紑鍙戜笂鐨勫皬鎶宸э紝浠ヤ究鎶涚爾寮曠帀錛岄犵浠栦漢銆傛榪庨珮鎵嬫潵鍠鳳紝鑿滈笩鑶滄嫓銆?br> 涔嬪墠鐨勬枃绔?/a>璁蹭簡鎸囬拡鍜屽唴瀛樼殑涓浜涢棶棰橈紝浠婂ぉ璇翠竴涓嬪崟鍏冩祴璇曠殑闂銆傚鏋滃湪鍥㈤槦閲岄潰娌℃湁瀵瑰崟鍏冩祴璇曠殑妗嗘灦鏈夎姹傜殑璇濓紝鍏跺疄鎴戜滑鍙互浣跨敤涓涓渶綆鍗曠殑鏂規(guī)硶鏉ユ惌寤哄湪IDE閲岄潰榪愯鐨勫崟鍏冩祴璇曟鏋訛紝鏁翠釜妗嗘灦鍙渶鍗佸嚑琛屼唬鐮併傛垜浠厛鏉ヨ冭檻涓涓嬪姛鑳芥渶灝戠殑鍗曞厓嫻嬭瘯妗嗘灦闇瑕佸畬鎴愪粈涔堟牱鐨勫唴瀹廣傞鍏堟垜浠榪愯涓涓竴涓殑嫻嬭瘯鐢ㄤ緥錛屽叾嬈″湪涓涓祴璇曠敤渚嬮噷闈㈡垜浠媯鏌ヤ竴浜涙潯浠舵槸鍚︽垚绔嬨備婦涓緥瀛愶紝鎴戜滑鍐欎竴涓嚱鏁板皢涓や釜瀛楃涓茶繛鎺ヨ搗鏉ワ紝涓鑸潵璇磋榪涜涓嬮潰鐨勬祴璇曪細
1 #include " MyUnitTestFramework.h " // 絳変竴涓嬫垜浠細灞曠ず涓涓嬪浣曠敤鏈灝戠殑浠g爜瀹屾垚榪欎釜澶存枃浠剁殑鍐呭 2 #include " " 3 4 TEST_CASE(StringConcat) 5 { 6 TEST_ASSERT(concat( " a " , " b " ) == " ab " ); 7 TEST_ASSERT(concat( " a " , "" ) == " a " ); 8 TEST_ASSERT(concat( "" , " b " ) == " b " ); 9 TEST_ASSERT(concat( "" , "" ) == "" ); 10 . 11 } 12 13 int wmain() 14 { 15 return 0 ; 16 }
濡傛灉鎴戜滑鐨勫崟鍏冩祴璇曟鏋跺彲浠ヨ繖涔堝啓錛岄偅鏄劇劧鍋氳搗浠涔堜簨鎯呮潵閮戒細鏂逛究寰堝錛岃屼笖涓嶉渶瑕佸悜涓浜涘叾浠栫殑嫻嬭瘯妗嗘灦涓鏍鋒敞鍐屼竴澶у爢涓滆タ錛屾垨鑰呮槸鍐欎竴澶у爢閰嶇疆鍑芥暟銆傚綋鐒惰繖嬈℃垜浠彧鍋氬姛鑳芥渶灝戠殑嫻嬭瘯妗嗘灦錛岃繖涓鏋墮櫎浜嗚繍琛屾祴璇曚互澶栵紝涓嶄細鏈夊叾浠栧姛鑳斤紝璀閫夋嫨鍝簺嫻嬭瘯鍙互榪愯鍟︼紝榪樻槸鍦ㄥ嚭閿欑殑鏃跺檒og涓浜涗粈涔堝暒涔嬬被銆備箣鎵浠ヨ鍦↖DE閲岄潰榪愯錛屾槸鍥犱負鎴戜滑濡傛灉鍋氬埌TEST_ASSERT涓嚭鐜癴alse鐨勮瘽錛岀珛鍒誨湪璇ヨ宕╂簝錛岄偅涔圛DE灝變細甯綘瀹氫綅鍒板嚭閿欑殑TEST_ASSERT涓幓錛岀劧鍚庣粰浣犳樉紺烘墍鏈夌殑涓婁笅鏂囦俊鎭紝璀璇碿allstack鍟︿粈涔堢殑銆傚弸濂界殑宸ュ叿涓嶇敤綆鐩村涓嶈搗鑷繁鍟婏紝騫插悧闈炲緱鎶婂崟鍏冩祴璇曞仛寰楅偅涔堝鏉傛崗錛屽嚒鏄崟鍏冩祴璇曪紝鎬繪槸瑕佸叏閮ㄨ繍琛岄氳繃鎵嶈兘鎻愪氦浠g爜鐨勩?br> 閭d箞鎴戜滑鏉ョ湅鐪嬩笂闈㈢殑鍗曞厓嫻嬭瘯鐨勪唬鐮併傞鍏堝啓浜員EST_CASE鐨勯偅涓湴鏂癸紝澶ф嫭鍙烽噷闈㈢殑浠g爜浼氳嚜鍔ㄨ繍琛屻傚叾嬈EST_ASSERT浼氬湪琛ㄨ揪寮忔槸false鐨勬椂鍊欏穿婧冦傚厛浠庣畝鍗曠殑鍏ユ墜鍚с傚浣曞埗閫犲穿婧冨憿錛熸渶綆鍗曠殑鍔炴硶灝辨槸鎶涘紓甯革細
1 #define TEST_ASSERT(e) do(if(!(e))throw "浠婃櫄娌¢キ鍚冦?;}while(0)
榪欓噷闈㈡湁涓や釜瑕佹敞鎰忕殑鍦版柟銆傞鍏坋瑕佸姞涓婂皬鎷彿錛屼笉鐒跺彇鍙嶆搷浣滅灝辨湁鍙兘鍋氬嚭閿欒鐨勮涓恒傝濡傝褰揺鏄痑+b==c鐨勬椂鍊欙紝鍔犱簡灝忔嫭鍙峰氨鍙樻垚if(!(a+b==c))...錛屾病鏈夊姞灝忔嫭鍙峰氨鍙樻垚if(!a+b==c)...錛屾剰鎬濆氨瀹屽叏鍙樹簡銆傜浜屼釜涓繪剰鐨勫湴鏂規(guī)槸鎴戜嬌鐢╠o{...}while(0)鎶婅鍙ュ寘鍥磋搗鏉ヤ簡銆傝繖鏍峰仛鐨勫ソ澶勬槸鍙互鍦ㄤ換浣曟椂鍊橳EST_ASSERT(e)閮藉儚涓涓鍙ャ傝濡傛垜浠彲鑳借繖涔堝啓錛?br>
1 if (a) 2 TEST_ASSERT(x1); 3 else if (b) 4 { 5 TEST_ASSERT(x2); 6 TEST_ASSERT(x3); 7 }
濡傛灉娌℃湁do{...}while(0)鍖呭洿璧鋒潵錛岃繖涓猠lse灝變細琚粦瀹氬埌瀹忛噷闈㈢殑閭d釜if錛屼綘鐨勪唬鐮佸氨琚伔鍋鋒敼鎺変簡銆?br> 閭d箞鐜板湪鍓╀笅TEST_CASE(x){y}浜嗐備粈涔堜笢瑗垮彲浠ュ湪main鍑芥暟澶栭潰鑷姩榪愯鍛紵榪欎釜鎴戞兂鐔熸?zhèn)塁++鐨勪漢閮戒細鐭ラ亾錛屽氨鏄叏灞鍙橀噺鐨勬瀯閫犲嚱鏁板暒銆傛墍浠EST_CASE(x){y}閭d釜澶ф嫭鍙烽噷闈㈢殑y鍙兘鍦ㄥ叏灞鍙橀噺鐨勬瀯閫犲嚱鏁伴噷闈㈣皟鐢ㄣ備絾鏄垜浠煡閬撳啓涓涓被鐨勬椂鍊欙紝鏋勯犲嚱鏁扮殑澶ф嫭鍙峰啓瀹屼簡錛屽悗闈㈣繕鏈夌被鐨勫ぇ鎷彿錛屽叏灞鍙橀噺鐨勫悕縐幫紝鍜屾渶緇堢殑涓涓垎鍙楓備負浜嗘妸榪欎簺鍘繪帀錛岄偅涔堟樉鐒秢y}搴旇灞炰簬涓涓櫘閫氱殑鍑芥暟銆傞偅涔堝叏灞鍙橀噺濡備綍鑳藉浣跨敤榪欎釜鍑芥暟鍛紵鏂規(guī)硶寰堢畝鍗曪紝鎶婂嚱鏁板墠緗0鏄庝竴涓嬪氨琛屼簡錛?br>
1 #define TEST_CASE(NAME) \ 2 extern void TESTCASE_##NAME(); \ 3 namespace vl_unittest_executors \ 4 { \ 5 class TESTCASE_RUNNER_##NAME \ 6 { \ 7 public : \ 8 TESTCASE_RUNNER_##NAME() \ 9 { \ 10 TESTCASE_##NAME(); \ 11 } \ 12 } TESTCASE_RUNNER_##NAME##_INSTANCE; \ 13 } \ 14 void TESTCASE_##NAME()
閭f垜浠潵鐪嬬湅TEST_CASE(x){y}絀剁珶浼氳緲昏瘧鎴愪粈涔堜唬鐮侊細
1 extern void TESTCASE_x(); 2 namespace vl_unittest_executors 3 { 4 class TESTCASE_RUNNER_x 5 { 6 public : 7 TESTCASE_RUNNER_x() 8 { 9 TESTCASE_x(); 10 } 11 } TESTCASE_RUNNER_x_INSTANCE; 12 } 13 void TESTCASE_x(){y}
鍒頒簡榪欓噷鏄笉鏄緢娓呮浜嗘崗錛岄鍏堝湪main鍑芥暟榪愯涔嬪墠TESTCASE_RUNNER_x_INSTANCE鍙橀噺浼氬垵濮嬪寲錛岀劧鍚庤皟鐢═ESTCASE_RUNNER_x鐨勬瀯閫犲嚱鏁幫紝鏈鍚庤繍琛屽嚱鏁癟ESTCASE_x錛岃鍑芥暟鐨勫唴瀹規(guī)樉鐒跺氨鏄瘂y}浜嗐傝繖閲岃繕鑳藉鍒板畯鏄浣曡繛鎺ヤ袱涓悕瀛楁垚涓轟竴涓悕瀛楋紝鍜屽浣曞啓澶氳鐨勫畯鐨勩?br> 浜庢槸MyUnittestFramework.h灝卞寘鍚繖涓や釜瀹忥紝鍏朵粬鍟ラ兘娌℃湁錛屾槸涓嶆槸寰堟柟渚垮憿錛熸墦寮Visual C++錛屽緩绔嬩竴涓伐紼嬶紝寮曠敤榪欎釜澶存枃浠訛紝鐒跺悗鍐欎綘鐨勫崟鍏冩祴璇曪紝鏈鍚嶧5灝辮繍琛屼簡錛屽鏂逛究鍟婏紝鍟婂搱鍝堝搱銆?br> 榪欓噷闇瑕佹敞鎰忎竴鐐癸紝閭d簺鍗曞厓嫻嬭瘯鐨勯『搴忔槸涓嶅彈鍒頒繚璇佺殑錛岀壒鍒槸浣犱嬌鐢ㄤ簡澶氫釜cpp鏂囦歡鐨勬儏鍐典笅銆備簬鏄綘鍦ㄤ嬌鐢ㄨ繖涓祴璇曟鏋剁殑鍚屾椂錛屼細琚揩淇濊瘉鎵ц涓嬈″崟鍏冩祴璇曚笉浼氬浣犵殑鍏ㄥ眬鐘舵佸甫鏉ヤ粈涔堝壇浣滅敤錛屼互渚夸袱涓祴璇曠敤渚嬩氦鎹㈤『搴忔墽琛岀殑鏃跺欎粛鐒惰兘紼沖畾鍦頒駭鐢熺浉鍚岀殑緇撴灉銆傝繖瀵逛綘鍐欏崟鍏冩祴璇曟湁甯姪錛岃屼笖涓轟簡璁╀綘鐨勪唬鐮佽兘澶熻榪欎箞嫻嬭瘯錛屼綘鐨勪唬鐮佷篃浼氬啓鐨勬湁鏉$悊錛屼笉浼氫緷璧栧叏灞鐘舵侊紝鐪熸槸涓涓句袱寰椾篃銆傝屼笖璇翠笉瀹氬崟鍏冩祴璇曠敤渚嬫瘮浣犵殑鍏ㄥ眬鍙橀噺鐨勫垵濮嬪寲榪樺厛鎵ц鍛紝鍥犳涓轟簡浣跨敤榪欎釜嫻嬭瘯妗嗘灦錛屼綘灝嗕細涓嶅緱涓嶆妸浣犵殑鍏ㄥ眬鍙橀噺闅愯棌鍦ㄤ竴涓猚pp閲岄潰錛岃屾毚闇插嚭闅忔椂鍙互琚皟鐢ㄧ殑涓緇勫嚱鏁板嚭鏉ャ傝繖鏍蜂篃鍙互璁╀綘鐨勪唬鐮佸湪浣跨敤鍏ㄥ眬鐘舵佺殑鏃跺欐洿鍔犲畨鍏ㄣ?br> 浠婂ぉ灝辮鍒拌繖閲屼簡銆備笅涓綃囪鍐欎粈涔堟垜榪樻病鎯沖ソ錛屽埌鏃跺欏啀璇村惂銆?
]]> C++瀹炵敤鎶宸э紙涓夛級 http://www.shnenglu.com/vczh/archive/2010/06/24/118635.html闄堟鐎?vczh) 闄堟鐎?vczh) Thu, 24 Jun 2010 07:03:00 GMT http://www.shnenglu.com/vczh/archive/2010/06/24/118635.html http://www.shnenglu.com/vczh/comments/118635.html http://www.shnenglu.com/vczh/archive/2010/06/24/118635.html#Feedback 14 http://www.shnenglu.com/vczh/comments/commentRss/118635.html http://www.shnenglu.com/vczh/services/trackbacks/118635.html 澶嶆潅鐨勪笢瑗垮啓澶氫簡錛屽浠婂啓鐐圭畝鍗曠殑濂戒簡銆傜敱浜庡姛鑳戒笂鐨勯渶瑕侊紝Vczh Library++3.0 琚垜鎼炲緱寰堢璋便備負浜嗗紑鍙戠淮鎶ょ殑閬嶅巻銆佸噺灝戠矖蹇冪姱涓嬬殑閿欒浠ュ強澧炲己鍗曞厓嫻嬭瘯銆佸洖褰掓祴璇曞拰嫻嬭瘯宸ュ叿錛屽洜姝よ褰曚笅涓浜涘紑鍙戜笂鐨勫皬鎶宸э紝浠ヤ究鎶涚爾寮曠帀錛岄犵浠栦漢銆傛榪庨珮鎵嬫潵鍠鳳紝鑿滈笩鑶滄嫓銆?br> 浠婂ぉ鏄叧浜庡唴瀛樼殑鏈鍚庝竴綃囦簡銆?a style="TEXT-DECORATION: underline" href="http://www.shnenglu.com/vczh/archive/2010/06/24/118603.html" target=_blank>涓婁竴綃囨枃绔?/a>璁蹭簡涓轟粈涔堜笉鑳藉涓涓笢瑗塊殢渚縨emset銆傞噷闈㈢殑demo浠g爜鍑轟簡鐐瑰皬bug錛屼笉榪囨垜涓嶅枩嬈㈠湪鍙戞枃绔犵殑鏃跺欓噷闈㈢殑demo浠g爜涔熸嬁鍘葷紪璇戝拰榪愯錛屾墍浠ュぇ瀹舵湁浠涔堝彂鐜扮殑闂灝辮瘎璁哄惂銆傝繖鏍蜂篃渚夸簬鍚庢潵鐨勪漢涓嶄細鍙楀埌璇銆傝繖嬈¤鐨勪粛鐒舵槸鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟鐨勪簨鎯咃紝涓嶈繃鎴戜滑灝嗛氳繃浜叉墜寮鍙戜竴涓櫤鑳芥寚閽堢殑鏂規(guī)硶錛岀煡閬撳紩鐢ㄨ鏁板浣曞府鍔╃鐞嗚祫婧愶紝浠ュ強閿欒浣跨敤寮曠敤璁℃暟鐨勬儏鍐點?br> 棣栧厛鍏堟潵鐪嬩竴涓嬫櫤鑳芥寚閽堟槸濡備綍甯姪鎴戜滑綆$悊鍐呭瓨鐨勩傜幇鍦ㄦ櫤鑳芥寚閽堢殑瀹炵幇闈炲父澶氾紝鎴戝氨鍋囪榪欎釜綾誨瀷鍙玃tr<T>鍚с傝繖璺烿czh Library++ 3.0鎵浣跨敤鐨勫疄鐜頒竴鏍楓?/p>
1 class Base 2 { 3 public : 4 virtual ~ Base(){} 5 }; 6 7 class Derived1 : public Base 8 { 9 }; 10 11 class Derived2 : public Base 12 { 13 }; 14 15 // --------------------------------------- 16 17 List < Ptr < Base >> objects; 18 objects.Add( new Derived1); 19 objects.Add( new Derived2); 20 21 List < Ptr < Base >> objects2; 22 objects2.Add(objects[ 0 ]);
褰撶劧榪欓噷鐨凩ist涔熸槸Vczh Library++3.0瀹炵幇鐨勶紝涓嶈繃榪欑帺鎰忓効璺焩ector涔熷ソ璺烠#鐨凩ist涔熷ソ閮芥槸涓涓蹇碉紝鍥犳涔熷氨涓嶉渶瑕佸鍔犺В閲婁簡銆傛垜浠彲浠ョ湅鍒版櫤鑳芥寚閽堢殑涓涓ソ澶勶紝鍙娌℃湁寰幆寮曠敤鍑虹幇錛屼綘鏃犺鎬庝箞澶嶅埗瀹冿紝鏈緇堟繪槸鍙互琚瀽鏋勬帀鐨勩傚彟涓涓緥瀛愬憡璇夋垜浠櫤鑳芥寚閽堝浣曞鐞嗙被鍨嬭漿鎹細
1 Ptr < Derived1 > d1 = new Derived1; 2 Ptr < Base > b = d1; 3 Ptr < Derived2 > d2 = b.Cast < Derived2 > (); 4 // d2鏄┖錛屽洜涓篵鎸囧悜鐨勬槸Derived1鑰屼笉鏄疍erived2銆?/span>
榪欏氨濡傚悓鎴戜滑Derived1*鍙互闅愬紡杞崲鍒癇ase*錛岃屽綋浣犱嬌鐢╠ynamic_cast<Derived2*>(static_cast<Base*>(new Derived1))浼氬緱鍒?涓鏍楓傛櫤鑳芥寚閽堝湪甯姪鎴戜滑鏋愭瀯瀵硅薄鐨勫悓鏃訛紝涔熻鍋氬ソ綾誨瀷杞崲鐨勫伐浣溿?br> 濂戒簡錛岀幇鍦ㄥ厛璁╂垜浠竴姝ヤ竴姝ュ仛鍑洪偅涓狿tr<T>銆傛垜浠渶瑕佹竻妤氳繖涓櫤鑳芥寚閽堟墍瑕佸疄鐜扮殑鍔熻兘鏄粈涔堬紝鐒跺悗鎴戜滑涓涓竴涓潵鍋氥傞鍏堣鎴戜滑鍒楀嚭涓寮犺〃錛?br> 1銆佹病鏈夊弬鏁版瀯閫犵殑鏃跺欙紝鍒濆鍖栦負絀?br> 2銆佷嬌鐢ㄦ寚閽堟瀯閫犵殑鏃跺欙紝鎷ユ湁閭d釜鎸囬拡錛屽茍涓斿湪娌℃湁浠諱綍鏅鴻兘鎸囬拡鎸囧悜閭d釜鎸囬拡鐨勬椂鍊欏垹闄ゆ帀璇ユ寚閽堛?br> 3銆佹櫤鑳芥寚閽堣繘琛屽鍒剁殑鏃跺欙紝涓や釜鏅鴻兘鎸囬拡鍏卞悓鎷ユ湁璇ュ唴閮ㄦ寚閽堛?br> 4銆佹櫤鑳芥寚閽堝彲浠ヤ嬌鐢ㄦ柊鐨勬櫤鑳芥寚閽堟垨瑁告寚閽堥噸鏂拌祴鍊箋?br> 5銆侀渶瑕佹敮鎸侀殣寮忔寚閽堢被鍨嬭漿鎹紝static_cast涓嶆敮鎸佽宒ynamic_cast鏀寔鐨勮漿鎹㈠垯浣跨敤Cast<T2>()鎴愬憳鍑芥暟鏉ヨВ鍐熾?br> 6銆佸鏋滀竴涓8鎸囬拡鐩存帴鐢ㄦ潵鍒涘緩涓や釜鏅鴻兘鎸囬拡鐨勮瘽錛屾湡鏈涚殑鎯呭喌鏄綋涓や釜鏅鴻兘鎸囬拡鏋愭瀯鎺夌殑鏃跺欙紝璇ユ寚閽堜細琚玠elete涓ゆ浠庤屽穿婧冦?br> 7銆佷笉澶勭悊寰幆寮曠敤銆?br> 鏈鍚庝袱鐐瑰疄闄呬笂鏄敊璇嬌鐢ㄦ櫤鑳芥寚閽堢殑鏈甯歌鐨勪袱縐嶆儏鍐點傛垜浠粠1鍒?涓涓竴涓疄鐜般傞鍏堟槸1銆傛櫤鑳芥寚閽堝彲浠ラ殣寮忚漿鎹㈡垚bool錛屽彲浠ラ氳繃operator->()鎷垮埌鍐呴儴鐨凾*銆傚湪娌℃湁浣跨敤鍙傛暟鏋勯犵殑鏃跺欙紝闇瑕佽漿鎹㈡垚false錛屼互鍙婃嬁鍒?錛?br>
1 template < typename T > 2 class Ptr 3 { 4 private : 5 T * pointer; 6 int * counter; 7 8 void Increase() 9 { 10 if (counter) ++* counter; 11 } 12 13 void Decrease() 14 { 15 if (counter && --* counter == 0 ) 16 { 17 delete counter; 18 delete pointer; 19 counter = 0 ; 20 pointer = 0 ; 21 } 22 } 23 24 public : 25 Ptr():pointer( 0 ),counter( 0 ) 26 { 27 } 28 29 ~ Ptr() 30 { 31 Decrease(); 32 } 33 34 operator bool () const 35 { 36 return counter != 0 ; 37 } 38 39 T * operator -> () const 40 { 41 return pointer; 42 } 43 };
鍦ㄨ繖閲屾垜浠疄鐜頒簡鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟銆傛瀯閫犲嚱鏁版妸鍐呴儴鎸囬拡鍜屽紩鐢ㄨ鏁扮殑鎸囬拡閮藉垵濮嬪寲涓虹┖錛岃屾瀽鏋勫嚱鏁板垯榪涜寮曠敤璁℃暟鐨勫噺涓鎿嶄綔銆傚彟澶栦袱涓搷浣滅閲嶈澆寰堝鏄撶悊瑙c傛垜浠富瑕佹潵鐪嬬湅Increase鍑芥暟鍜孌ecrease鍑芥暟閮藉垎鍒仛浜嗕粈涔堛侷ncrease鍑芥暟鍦ㄥ紩鐢ㄨ鏁板瓨鍦ㄧ殑鎯呭喌涓嬶紝鎶婂紩鐢ㄨ鏁板姞涓銆傝孌ecrease鍑芥暟鍦ㄥ紩鐢ㄨ鏁板瓨鍦ㄧ殑鎯呭喌涓嬶紝鎶婂紩鐢ㄨ鏁板噺涓錛屽鏋滃紩鐢ㄨ鏁板湪鍑忎竴榪囩▼涓彉鎴愪簡0錛屽垯鍒犳帀鎷ユ湁鐨勮祫婧愩?br> 褰撶劧鍒頒簡榪欎釜鏃跺欐櫤鑳芥寚閽堣繕涓嶈兘鐢紝鎴戜滑蹇呴』鏇夸粬鍔犱笂澶嶅埗鏋勯犲嚱鏁幫紝operator=鎿嶄綔絎﹂噸杞戒互鍙婁嬌鐢ㄦ寚閽堣祴鍊肩殑鎯呭喌銆傞鍏堣鎴戜滑鏉ョ湅浣跨敤鎸囬拡璧嬪肩殑璇濇垜浠簲璇ュ姞涓婁粈涔堬細
1 Ptr(T * p):pointer( 0 ),counter( 0 ) 2 { 3 * this = p; 4 } 5 6 Ptr < T >& operator = (T * p) 7 { 8 Decrease(); 9 if (p) 10 { 11 pointer = p; 12 counter = new int ( 1 ); 13 } 14 else 15 { 16 pointer = 0 ; 17 counter = 0 ; 18 } 19 return * this ; 20 }
榪欓噷榪樻槸鍋峰伐鍑忔枡浜嗙殑錛屾瀯閫犲嚱鏁版帴鍙椾簡鎸囬拡鐨勮瘽錛岃繕鏄漿緇檕perator=鍘昏皟鐢ㄤ簡銆傚綋涓涓櫤鑳芥寚閽堣涓涓柊鎸囬拡璧嬪肩殑鏃跺欙紝鎴戜滑棣栧厛瑕佸噺鎺変竴涓紩鐢ㄨ鏁幫紝鍥犱負鍘熸潵鐨勬寚閽堝啀涔熶笉琚繖涓櫤鑳芥寚閽堝叡浜簡銆備箣鍚庡氨榪涜鍒ゆ柇錛屽鏋滄潵鐨勬槸0錛岄偅涔堝氨鍙樻垚絀恒傚鏋滀笉鏄?錛屽氨鎷ユ湁璇ユ寚閽堬紝寮曠敤璁℃暟鍒濆鍖栨垚1銆備簬鏄垜浠氨鍙互榪欎箞浣跨敤浜嗭細
1 Ptr < Base > b = new Derived1; 2 Ptr < Derived2 > d2 = new Derived2;
璁╂垜浠紑濮嬪鍒朵粬浠惂銆傚鍒剁殑瑕侀鏄紝鍏堟妸涔嬪墠鎷ユ湁鐨勬寚閽堣劚紱繪帀錛岀劧鍚庤繛鎺ュ埌涓涓柊鐨勬櫤鑳芥寚閽堜笂闈㈠幓銆傛垜浠煡閬撻潪絀烘櫤鑳芥寚閽堟湁澶氬皯涓紝鎬葷殑寮曠敤璁℃暟鐨勫拰灝辨槸澶氬皯錛屽彧鏄垎閰嶅埌鍚勪釜鎸囬拡涓婇潰鐨勬暟瀛椾笉涓鏍瘋屽凡錛?br>
1 Ptr( const Ptr < T >& p):pointer(p.pointer),counter(p.counter) 2 { 3 Increase(); 4 } 5 6 Ptr < T >& operator = ( const Ptr < T >& p) 7 { 8 if ( this !=& p) 9 { 10 Decrease(); 11 pointer = p.pointer; 12 counter = p.counter; 13 Increase(); 14 } 15 return * this ; 16 }
鍦ㄤ笂涓綃囨枃绔犳湁鏈嬪弸鎸囧嚭閲嶈澆operator=鐨勬椂鍊欓渶瑕佽冭檻鏄笉鏄嚜宸辮祴鍊肩粰鑷繁錛屽叾瀹炶繖鏄緢姝g‘鐨勩傛垜浠啓姣忎竴綾葷殑鏃跺欙紝鐗瑰埆鏄綋綾繪嫢鏈夎嚜宸辨帶鍒剁殑璧勬簮鐨勬椂鍊欙紝闇瑕侀潪甯告敞鎰忚繖浠朵簨鎯呫傚綋鐒跺鏋滃彧鏄鍒跺嚑涓璞¤屼笉浼歯ew鍟奷elete榪樻槸close浠涔坔andle錛岄偅媯鏌ヤ笉媯鏌ヤ篃鏃犳墍璋撲簡銆傚湪榪欓噷鎴戜滑闈炲父娓呮錛屽綋澧炲姞涓涓柊鐨勯潪絀烘櫤鑳芥寚閽堢殑鏃跺欙紝寮曠敤璁℃暟鐨勬誨拰浼氬姞涓銆傚綋淇敼涓涓潪絀烘櫤鑳芥寚閽堢殑緇撴灉涔熸槸闈炵┖鐨勬椂鍊欙紝寮曠敤璁℃暟鐨勫拰淇濇寔涓嶅彉銆傚綋鐒惰繖鏄簲璇ョ殑錛屽洜涓烘垜浠渶瑕佸湪鎵鏈夐潪絀烘櫤鑳芥寚閽堥兘琚瘉鎺夌殑鏃跺欙紝閲婃斁鍙椾繚鎶ょ殑鎵鏈夎祫婧愩?br> 鍒頒簡榪欓噷涓涓櫤鑳芥寚閽堝熀鏈笂宸茬粡鑳界敤浜嗭紝浣嗘槸榪樹笉鑳藉鐞嗙埗綾誨瓙綾葷殑鎯呭喌銆傝繖涓槸姣旇緝楹葷儲鐨勶紝涓涓狿tr<Derived>浜嬪疄涓婃病鏈夋潈闄愯闂甈tr<Base>鐨勫唴閮ㄥ璞°傚洜姝ゆ垜浠渶瑕侀氳繃鍙嬪厓綾繪潵瑙e喅榪欎釜闂銆傜幇鍦ㄨ鎴戜滑鏉ユ坊鍔犱袱涓柊鐨勫嚱鏁板惂錛屼粠涓涓換鎰忕殑Ptr<C>澶嶅埗鍒癙tr<T>錛岀劧鍚庝繚璇佸彧鏈夊綋C*鍙互闅愬紡杞崲鎴怲*鐨勬椂鍊欑紪璇戣兘澶熼氳繃錛?br>
1 template < X > friend class Ptr; 2 3 template < typename C > 4 Ptr( const Ptr < C >& p):pointer(p.pointer),counter(p.counter) 5 { 6 Increase(); 7 } 8 9 template < typename C > 10 Ptr < T >& operator = ( const Ptr < C >& p) 11 { 12 Decrease(); 13 pointer = p.pointer; 14 counter = p.counter; 15 Increase(); 16 return * this ; 17 }
娉ㄦ剰榪欓噷鎴戜滑鐨刼perator=騫朵笉鐢ㄦ鏌ユ槸涓嶆槸鑷繁緇欒嚜宸辮祴鍊鹼紝鍥犱負榪欐槸涓や釜涓嶅悓鐨勭被錛岀浉鍚岀殑璇濅細璋冪敤涓婇潰閭d釜operator=鐨勩傚鏋淐*涓嶈兘闅愬紡杞崲鍒癟*鐨勮瘽錛岃繖閲岀殑pointer=p.pointer灝變細澶辮觸錛屼粠鑰屾弧瓚充簡鎴戜滑鐨勮姹傘?br> 鐜板湪鎴戜滑鑳藉鍋氱殑浜嬫儏灝辨洿澶氫簡錛?br>
1 Ptr < Derived1 > d1 = new Derived1; 2 Ptr < Base > b = d1;
浜庢槸鎴戜滑鍙墿涓嬫渶鍚庝竴涓狢ast鍑芥暟浜嗐傝繖涓嚱鏁板唴閮ㄤ嬌鐢╠ynamic_cast鏉ュ仛鍒ゆ柇錛屽鏋滆漿鎹㈠け璐ワ紝浼氳繑鍥炵┖鎸囬拡錛?br>
1 tempalte < typename C > 2 Ptr < C > Cast() const 3 { 4 C * converted = dynamic_cast < C *> (pointer); 5 Ptr < C > result; 6 if (converted) 7 { 8 result.pointer = converted; 9 result.counter = counter; 10 Increase(); 11 } 12 return result; 13 }
榪欐槸涓縐峢ack鐨勬柟娉曪紝騫蟲椂鏄笉榧撳姳鐨?#8230;…涓嶈繃鍥犱負鎿嶄綔鐨勯兘鏄疨tr錛岃屼笖鐗瑰寲Ptr涔熸槸浣跨敤閿欒鐨勪竴縐嶏紝鎵浠ヨ繖閲屽氨涓嶇浜嗐傛垜浠細媯鏌ynamic_cast鐨勭粨鏋滐紝濡傛灉鎴愬姛浜嗭紝閭d箞浼氳繑鍥炰竴涓潪絀虹殑鏂版櫤鑳芥寚閽堬紝鑰屼笖榪欎釜鏃跺欐垜浠篃瑕佽浣廔ncrease涓涓嬨?br> 濂戒簡錛屽熀鏈姛鑳藉氨瀹屾垚浜嗐傚綋鐒朵竴涓櫤鑳芥寚閽堣繕瑕佸緢澶氬叾浠栧姛鑳斤紝璀璇存瘮杈冧粈涔堢殑錛岃繖涓氨浣犱滑鑷繁鎼炲畾鍝堛?br> 鎸囬拡鍜屽唴瀛樺氨璇村埌榪欓噷浜嗭紝涓嬩竴綃囪濡備綍鍒╃敤涓涓ソ鐨処DE鏋勯犺交閲忕駭鍗曞厓嫻嬭瘯緋葷粺銆傛垜浠兘璇村ソ鐨勫伐鍏瘋兘澶熸彁楂樼敓浜у姏錛屽洜姝よ繖縐嶆柟娉曚笉鑳借劚紱諱竴涓ソ鐨処DE浣跨敤銆?
]]> C++瀹炵敤鎶宸э紙浜岋級 http://www.shnenglu.com/vczh/archive/2010/06/24/118603.html闄堟鐎?vczh) 闄堟鐎?vczh) Wed, 23 Jun 2010 18:12:00 GMT http://www.shnenglu.com/vczh/archive/2010/06/24/118603.html http://www.shnenglu.com/vczh/comments/118603.html http://www.shnenglu.com/vczh/archive/2010/06/24/118603.html#Feedback 23 http://www.shnenglu.com/vczh/comments/commentRss/118603.html http://www.shnenglu.com/vczh/services/trackbacks/118603.html Vczh Library++3.0琚垜鎼炲緱寰堢璋便備負浜嗗紑鍙戠淮鎶ょ殑閬嶅巻銆佸噺灝戠矖蹇冪姱涓嬬殑閿欒浠ュ強澧炲己鍗曞厓嫻嬭瘯銆佸洖褰掓祴璇曞拰嫻嬭瘯宸ュ叿錛屽洜姝よ褰曚笅涓浜涘紑鍙戜笂鐨勫皬鎶宸э紝浠ヤ究鎶涚爾寮曠帀錛岄犵浠栦漢銆傛榪庨珮鎵嬫潵鍠鳳紝鑿滈笩鑶滄嫓銆?br> 涓婁竴綃囨枃绔?/a>璁插埌浜嗗浣曟鏌ュ唴瀛樻硠闇層傚叾瀹炲彧瑕佽偗鐢–++鐨凷TL閲岄潰鐨勯珮綰у姛鑳界殑璇濓紝鍐呭瓨娉勯湶鏄緢瀹規(guī)槗閬垮厤鐨勩傛垜鍦ㄥ紑鍙慥czh Library++ 3.0鐨勬椂鍊欙紝鎵鏈夌殑嫻嬭瘯鐢ㄤ緥閮戒繚璇佽窇瀹屼簡娌℃湁鍐呭瓨娉勯湶銆備絾鏄緢鍙儨鏈変簺C++鍥㈤槦涓嶈兘浣跨敤寮傚父錛屾洿鐢氳呬笉鍏佽鍐欐瀯閫犲嚱鏁版瀽鏋勫嚱鏁頒箣綾伙紝鍓嶄竴涓繕濂斤紝鍚庝竴涓畝鐩村氨鏄湪鐢–銆傚綋鐒舵湁榪欎簺鍙樻佽瀹氱殑鍦版柟STL閮芥槸鐢ㄤ笉浜嗙殑錛屾墍浠ユ垜浠洿鍔犻渶瑕佹墡瀹炵殑鍩虹鏉ュ紑鍙慍++紼嬪簭銆?br> 浠婂ぉ榪欎竴綃囦富瑕佽繕鏄鎸囬拡鐨勯棶棰樸傚洜涓轟笂涓綃囨枃绔犱竴絎斿甫榪囷紝浠婂ぉ灝辨潵璇︾粏璁插唴瀛樻硠婕忔垨鑰呴噹鎸囬拡鍙戠敓鐨勫悇縐嶆儏鍐點傚綋鐒舵垜涓嶅彲鑳戒竴涓嬪瓙涓懼嚭鍏ㄩ儴鐨勪緥瀛愶紝鍙兘璇翠竴浜涘父瑙佺殑銆?br> 涓銆侀敊璇鐩栧唴瀛樸?br> 涔嬪墠鎻愬埌鐨勪笉鑳介殢渚夸貢memset鍏跺疄灝辨槸涓轟簡閬垮厤榪欎釜闂鐨勩傚叾瀹瀖emcpy涔熶笉鑳戒貢鐢紝鎴戜滑鏉ョ湅涓涓緥瀛愶紝鏈綆鍗曠殑錛?br>
1 #define MAX_STRING 20; 2 3 struct Student 4 { 5 char name[MAX_STRING]; 6 char id[MAX_STRING]; 7 int chinese; 8 int math; 9 int english; 10 };
澶у瀵硅繖縐嶇粨鏋勮偗瀹氬崄鍒嗙啛鎮(zhèn)夛紝姣曠珶鏄ぇ瀛︽椂鍊欑粡甯歌鍐欑殑浣滀笟棰?#8230;…濂戒簡錛屽ぇ瀹跺緢瀹規(guī)槗鐪嬪緱鍑烘潵榪欏叾瀹炴槸C璇█鐨勭粡鍏稿啓娉曘傛垜浠嬁鍒版墜涔嬪悗錛屼竴鑸細鍏堝垵濮嬪寲涓涓嬶紝鐒跺悗璧嬪箋?br>
1 Student vczh; 2 memset( & vczh, 0 , sizeof (vczh)); 3 strcpy(vczh.name, " vczh " ); 4 strcpy(vczh.id, " VCZH'S ID " ); 5 vczh.chinese = 70 ; 6 vczh.math = 90 ; 7 vczh.english = 80 ;
涓轟粈涔堣鍦ㄨ繖閲屼嬌鐢╩emset鍛紵memset鐨勭敤澶勬槸灝嗕竴孌靛唴瀛樼殑姣忎竴涓瓧鑺傞兘璁劇疆鎴愬悓涓涓暟瀛椼傝繖閲屾槸0錛屽洜姝や袱涓瓧絎︿覆鎴愬憳鐨勬墍鏈夊瓧鑺傞兘浼氬彉鎴?銆傚洜姝ゅ湪memset浜哠tudent涔嬪悗錛屾垜浠氳繃姝e父鏂規(guī)硶鏉ヨ闂畁ame鍜宨d鐨勬椂鍊欓兘浼氬緱鍒扮┖涓層傝屼笖濡傛灉Student閲岄潰鏈夋寚閽堢殑璇濓紝0鎸囬拡浠h〃鐨勬槸娌℃湁鎸囧悜浠諱綍鏈夋晥瀵硅薄錛屽洜姝よ繖涓椂鍊欏鎸囬拡鎸囧悜鐨勫璞¤繘琛岃鍐欏氨浼氱珛鍒誨穿婧冦傚浜庡叾浠栨暟鍊鹼紝0涓鑸綔涓哄垵濮嬪間篃涓嶄細鏈変粈涔堥棶棰橈紙double浠涔堢殑瑕佸皬蹇冿級銆傝繖灝辨槸鎴戜滑鍐欑▼搴忕殑鏃跺欎嬌鐢╩emset鐨勫師鍥犮?br> 濂戒簡錛屽浠婄ぞ浼氳繘姝ワ紝浜烘皯褰撳鍋氫富浜嗭紝姝葷▼浠啀涔熶笉闇瑕佸彈鍒板彲鎭剁殑C璇█鍓ュ墛浜嗭紝鎴戜滑鍙互浣跨敤C++錛佸洜姝ゆ垜浠熷姪STL鐨勫姏閲忔妸Student鏀瑰啓鎴愪笅闈㈣繖縐嶅甫鏈塁++鍛抽亾鐨勫艦寮忥細
1 struct Student 2 { 3 std:: string name; 4 std:: string id; 5 int chinese; 6 int math; 7 int english; 8 };
鎴戜滑浠嶇劧闇瑕佸Student榪涜鍒濆鍖栵紝涓嶇劧涓変釜鍒嗘暟榪樻槸闅忔満鍊箋備絾鏄垜浠張涓嶆兂姣忎竴嬈″垱寤虹殑鏃跺欓兘瀵逛粬浠垎鍒繘琛岃祴鍊煎垵濮嬪寲鍩?銆傝繖涓椂鍊欎綘蹇冮噷鍙兘榪樻槸鎯崇潃memset錛?span style="COLOR: red">榪欏氨閿欎簡 錛佸湪memset鐨勬椂鍊欙紝浣犱細鎶妔td::string鍐呴儴鐨勪笉鐭ラ亾浠涔堜笢瑗夸篃緇檓emset鎺夈傚亣濡備竴涓┖鐨剆td::string閲岄潰瀛樻斁鐨勬寚閽堟寚鍚戠殑鏄竴涓┖鐨勫瓧絎︿覆鑰屼笉鏄敤0鏉ヤ唬琛ㄧ┖鐨勬椂鍊欙紝涓涓嬪瓙鍐呴儴鐨勬寚閽堝氨琚綘鍒鋒垚0錛岀瓑涓媠td::string鐨勬瀽鏋勫嚱鏁板氨娌″姙娉昫elete鎺夋寚閽堜簡錛屼簬鏄?span style="COLOR: red">鍐呭瓨娉勯湶灝卞嚭鐜頒簡 銆傛湁浜涙湅鍙嬪彲鑳戒笉鐭ラ亾涓婇潰閭e彞璇濊鐨勬槸浠涔堟剰鎬濓紝鎴戜滑鐜板湪鏉ユā鎷熶竴涓嬩笉鑳絤emset鐨剆td::string瑕佹庝箞瀹炵幇銆?br> 涓轟簡璁﹎emset涓瀹氬嚭鐜板唴瀛樻硠闇詫紝閭d箞std::string閲岄潰鐨勬寚閽堝繀欏繪案榪滈兘鎸囧悜涓涓湁鏁堢殑涓滆タ銆傚綋鐒舵垜浠繕闇瑕佸湪瀛楃涓茶繘琛屽鍒剁殑鏃跺欏鍒舵寚閽堛傛垜浠繖閲屼笉鑰冭檻鍚勭浼樺寲鎶鏈紝鐢ㄦ渶綆鍗曠殑鏂規(guī)硶鍋氫竴涓瓧絎︿覆鍑烘潵錛?br>
1 class String 2 { 3 private : 4 char * buffer; 5 6 public : 7 String() 8 { 9 buffer = new char [ 1 ]; 10 buffer[ 0 ] = 0 ; 11 } 12 13 String( const char * s) 14 { 15 buffer = new char [strlen(s) + 1 ]; 16 strcpy(buffer, s); 17 } 18 19 String( const String & s) 20 { 21 buffer = new char [strlen(s.buffer) + 1 ]; 22 strcpy(buffer, s.buffer); 23 } 24 25 ~ String() 26 { 27 delete[] buffer; 28 } 29 30 String & operator = ( const String & s) 31 { 32 delete[] buffer; 33 buffer = new char [strlen(s.buffer) + 1 ]; 34 strcpy(buffer, s.buffer); 35 } 36 };
浜庢槸鎴戜滑鏉ュ仛涓涓媘emset銆傞鍏堝畾涔変竴涓瓧絎︿覆鍙橀噺錛屽叾嬈emset鎺夛紝璁╂垜浠湅鐪嬩細鍙戠敓浠涔堜簨鎯咃細
1 string s; 2 memset( & s, 0 , sizeof (s));
絎竴琛屾垜浠瀯閫犱簡涓涓瓧絎︿覆s銆傝繖涓椂鍊欏瓧絎︿覆鐨勬瀯閫犲嚱鏁板氨浼氬紑濮嬭繍琛岋紝鍥犳strcmp(s.buffer, "")==0銆傜浜岃鎴戜滑鎶婇偅涓瓧絎︿覆緇檓emset鎺変簡銆傝繖涓椂鍊檚.buffer==0銆備簬鏄嚱鏁扮粨鏉熶簡錛屽瓧絎︿覆鐨勬瀽鏋勫嚱鏁板皾璇昫elete榪欎釜鎸囬拡銆傛垜浠煡閬揹elete涓涓?鏄笉浼氭湁闂鐨勶紝鍥犳紼嬪簭涓嶄細鍙戠敓閿欒銆?span style="COLOR: red">鎴戜滑媧葷敓鐢熸妸鏋勯犲嚱鏁拌祴鍊肩粰buffer鐨刵ew char[1]緇欎涪浜?/strong>錛侀搧瀹氬彂鐢熷唴瀛樻硠闇詫紒 濂戒簡錛屾彁鍑洪棶棰樻昏瑙e喅闂錛屾垜浠笉浣跨敤memset鐨勮瘽錛屾庝箞鍒濆鍖朣tudent鍛紵榪欎釜鍗佸垎濂藉仛錛屾垜浠彧闇瑕佷負Student鍔犱笂鏋勯犲嚱鏁板嵆鍙細
1 struct Student 2 { 3 . // 涓嶉噸澶嶉偅浜涘0鏄?/span>4 5 Student():chinese( 0 ),math( 0 ),english( 0 ) 6 { 7 } 8 };
榪欐牱灝卞鏄撳浜嗐傛瘡褰撴垜浠畾涔変竴涓猄tudent鍙橀噺鐨勬椂鍊欙紝鎵鏈夌殑鎴愬憳閮藉垵濮嬪寲濂戒簡銆俷ame鍜宨d鍥犱負string鐨勬瀯閫犲嚱鏁頒篃鑷繁鍒濆鍖栦簡錛屽洜姝ゆ墍鏈夌殑鎴愬憳涔熼兘鍒濆鍖栦簡銆傚姞鍏tudent鐢ㄤ簡涓鍗婃垜浠兂鍐嶅垵濮嬪寲涓涓嬫庝箞鍔炲憿錛熶篃寰堝鏄擄細
1 Student vczh; 2 .// 鍚勭浣跨敤 3 vczh = Student();
緇忚繃涓涓瓑鍙鋒搷浣滅鐨勮皟鐢紝鏃tudent鐨勬墍鏈夋垚鍛樺氨琚竴涓柊鐨勫垵濮嬪寲榪囩殑Student緇欒鐩栦簡錛屽氨濡傚悓鎴戜滑瀵逛竴涓猧nt鍙橀噺閲嶆柊璧嬪間竴鏍峰父瑙併傚綋鐒跺洜涓哄悇縐嶅鍒剁粡甯鎬細鍑虹幇錛屽洜姝ゆ垜浠篃瑕佽窡涓婇潰璐村嚭鏉ョ殑string鐨勪緥瀛愪竴鏍鳳紝瀹炵幇濂介偅4涓嚱鏁般傝嚦姝ゆ垜鍗佸垎涓嶇悊瑙d負浠涔堟煇浜涘洟闃熶笉鍏佽浣跨敤鏋勯犲嚱鏁幫紝鎴戠寽灝辨槸涓轟簡鍙互memset錛屽叾瀹炴槸寰堟病閬撶悊鐨勩?br> 浜屻佸紓甯搞?/strong> 鍜嬩竴鐪嬪唴瀛樻硠闇茶窡寮傚父濂藉儚娌′粈涔堝叧緋伙紝浣嗗疄闄呬笂榪欑鎯呭喌鏇村鏄撳彂鐢熴傛垜浠潵鐪嬩竴涓緥瀛愶細
1 char * strA = new char [MAX_PATH]; 2 if (GetXXX(strA, MAX_PATH) == ERROR) goto RELEASE_STRA; 3 char * strB = new char [MAX_PATH]; 4 if (GetXXX(strB, MAX_PATH) == ERROR) goto RELEASE_STRB; 5 6 DoSomething(strA, strB); 7 8 RELEASE_STRB: 9 delete[] strB; 10 RELEASE_STRA: 11 delete[] strA;
鐩鎬俊榪欒偗瀹氭槸澶у鐨勫父鐢ㄦā寮忋傛垜鍦ㄨ繖閲屼篃涓嶆槸鏁欏攩澶у浣跨敤goto錛屼笉榪囧浜庤繖縐嶄緥瀛愭潵璇達紝鐢╣oto鏄渶浼樼編鐨勮В鍐沖姙娉曚簡銆備絾鏄ぇ瀹跺彲浠ョ湅鍑烘潵錛屾垜浠敤鐨勬槸C++錛屽洜涓鴻繖閲屾湁new銆傚鏋淒oSomething鍙戠敓浜嗗紓甯告庝箞鍔炲憿錛熷鏋淕etXXX鍙戠敓浜嗗紓甯告庝箞鍔炲憿錛熸垜浠繖閲屾病鏈変換浣曠殑try-catch錛屼竴鏈夊紓甯革紝鍑芥暟閲屽厠緇撴潫錛屼袱琛屽彲鎬滅殑delete灝變笉浼氳鎵ц鍒頒簡錛?span style="COLOR: red">浜庢槸鍐呭瓨娉勬紡鍙戠敓浜?/strong>錛?br> 閭f垜浠浣曢伩鍏嶈繖縐嶆儏鍐典笅鐨勫唴瀛樻硠闇插憿錛熶竴浜涘彲鐖辯殑灝忕泦鍙嬪彲鑳戒細鎯沖埌錛屾棦鐒舵槸鍥犱負娌℃湁catch寮傚父鎵嶅彂鐢熺殑鍐呭瓨娉勯湶錛岄偅鎴戜滑鏉atch鍚э細
1 char * strA = new char [MAX_PATH]; 2 try 3 { 4 if (GetXXX(strA, MAX_PATH) == ERROR) goto RELEASE_STRA; 5 char * strB = new char [MAX_PATH]; 6 try 7 { 8 if (GetXXX(strB, MAX_PATH) == ERROR) goto RELEASE_STRB; 9 DoSomething(strA, strB); 10 } 11 catch ( ) 12 { 13 delete[] strB; 14 throw ; 15 } 16 } 17 catch ( ) 18 { 19 delete[] strA; 20 throw ; 21 } 22 23 RELEASE_STRB: 24 delete[] strB; 25 RELEASE_STRA: 26 delete[] strA;
浣犺兘鎺ュ彈鍚楋紵褰撶劧鏄笉鑳界殑銆傞棶棰樺嚭鍦ㄥ摢閲屽憿錛熷洜涓篊++娌℃湁try-finally銆備綘鐪嬭繖浜涗唬鐮佸埌澶勯兘鏄浄鍚岀殑涓滆タ錛屾樉鐒舵垜浠渶瑕佺紪璇戝櫒甯垜浠妸榪欎簺闂鎼炲畾銆傛渶濂界殑瑙e喅鏂規(guī)硶鏄粈涔堝憿錛熸樉鐒惰繕鏄瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟銆傛諱箣璁頒綇錛?span style="COLOR: red">濡傛灉鎯寵浜嬫儏鎴愬鍙戠敓錛岄偅涔堜嬌鐢ㄦ瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟 銆?br> 絎竴姝ワ紝GetXXX鏄劇劧鍙兘鏀寔C妯″紡鐨勪笢瑗匡紝鍥犳鎴戜滑瑕佸啓涓涓敮鎸丆++鐨勶細
1 bool GetXXX2( string & s) 2 { 3 char * str = new char [MAX_PATH]; 4 bool result; 5 try 6 { 7 result = GetXXX(str, MAX_PATH); 8 if (result)s = str; 9 } 10 catch ( ) 11 { 12 delete[] str; 13 throw ; 14 } 15 delete[] str; 16 return result; 17 }
鍊熷姪榪欎釜鍑芥暟鎴戜滑鍙互鐪嬪埌錛屽洜涓烘湁浜咷etXXX榪欑C鐨勪笢瑗匡紝瀵艱嚧鎴戜滑澶氫簡澶氬皯楹葷儲銆備笉榪囪繖鎬繪槸涓鍔蟲案閫哥殑錛屾湁浜咷etXXX2鍜屼慨鏀逛箣鍚庣殑DoSomething2涔嬪悗錛屾垜浠氨鍙互鐢ㄦ洿綆鍗曠殑鏂規(guī)硶鏉ュ仛浜嗭細
1 string a,b; 2 if (GetXXX2(a) && GetXXX2(b)) 3 { 4 DoSomething2(a, b); 5 }
澶氫箞綆鍗曟槗鎳傘傝繖涓唬鐮佸湪浠諱綍鍦版柟鍙戠敓浜嗗紓甯革紝鎵鏈塶ew鐨勪笢瑗塊兘浼氳delete銆傝繖灝辨槸鏋愭瀯鍑芥暟鐨勪竴涓ソ澶勩備竴涓彉閲忕殑鏋愭瀯鍑芥暟鍦ㄨ繖涓彉閲忚秴鍑轟簡浣滅敤鍩熺殑鏃跺欎竴瀹氫細琚皟鐢紝鏃犺浠g爜鏄庝箞璧板嚭鍘葷殑銆?br> 浠婂ぉ灝辮鍒拌繖閲屼簡銆傝浜嗚繖涔堝榪樻槸鎯寵澶у涓嶈灝忕湅鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟銆傞偅縐嶅井涓嶈凍閬撶殑鍥犱負涓灝忛儴鍒嗕笉鏄摱棰堢殑鎬ц兘闂鑰屾斁寮冩瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鐨勫仛娉曪紝緇堢┒鏄涓轟簡淇産ug鑰屽姞鐝殑銆傚彧瑕佹槑鐧藉茍鐢ㄥソ浜嗘瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁板拰寮傚父錛岄偅涔圕++鐨勭壒鎬т篃鍙互璺烠涓鏍鋒竻妤氭槑鐧戒究浜庣悊瑙o紝鑰屼笖鍐欏嚭鏉ョ殑浠g爜鏇村ソ鐪嬬殑銆傚ぇ瀹舵湡寰呯涓夌瘒鍝堛?
]]> C++瀹炵敤鎶宸э紙涓錛?/title> http://www.shnenglu.com/vczh/archive/2010/06/22/118493.html闄堟鐎?vczh) 闄堟鐎?vczh) Tue, 22 Jun 2010 13:16:00 GMT http://www.shnenglu.com/vczh/archive/2010/06/22/118493.html http://www.shnenglu.com/vczh/comments/118493.html http://www.shnenglu.com/vczh/archive/2010/06/22/118493.html#Feedback 29 http://www.shnenglu.com/vczh/comments/commentRss/118493.html http://www.shnenglu.com/vczh/services/trackbacks/118493.html Vczh Library++3.0琚垜鎼炲緱寰堢璋便備負浜嗗紑鍙戠淮鎶ょ殑閬嶅巻銆佸噺灝戠矖蹇冪姱涓嬬殑閿欒浠ュ強澧炲己鍗曞厓嫻嬭瘯銆佸洖褰掓祴璇曞拰嫻嬭瘯宸ュ叿錛屽洜姝よ褰曚笅涓浜涘紑鍙戜笂鐨勫皬鎶宸э紝浠ヤ究鎶涚爾寮曠帀錛岄犵浠栦漢銆傛榪庨珮鎵嬫潵鍠鳳紝鑿滈笩鑶滄嫓銆?br> C++瀹炶皳鍚勭璇█涓殑杞倠錛屽姛鑳藉己澶э紝闄烽槺鏇村己澶с傚綋鐒舵垜璁や負涓闂ㄨ璦鐢ㄥ緱涓嶅ソ瀹屽叏鏄▼搴忓憳鐨勮矗浠伙紝涓嶈繃鍥犱負C++娑夊強鍒扮殑姒傚康瀹炲湪鏄お澶氾紝鎯崇敤濂藉疄鍦ㄤ篃涓嶆槸涓浠跺鏄撶殑浜嬫儏銆侰++寮鍙戠殑鏃跺欐繪槸浼氶亣鍒板悇縐嶅悇鏍風殑闂錛屽叾涓渶涓ラ噸鐨勬棤闈炴槸鍐呭瓨鐩稿叧鐨勩侰璇█鐢變簬緇撴瀯綆鍗曪紝鍐呭瓨澶勭悊璧鋒潵铏界劧涓嶅緱鍔涳紝浣嗘葷殑鏉ヨ鎯敤娉曞凡緇忔繁鍏ヤ漢蹇冿紝鍥犳涔熶笉浼氶犳垚浠涔堝緢闅懼彂鐜扮殑閿欒銆侰++灝變笉涓鏍蜂簡銆傛湁浜嗚櫄鍑芥暟銆佹瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁般佸鍒舵瀯閫犲嚱鏁板拰operator=閲嶈澆涔嬪悗錛岃繕鏄湁寰堝浜哄枩嬈㈡妸涓涓被鐩存帴鍐欒繘鏂囦歡嫻侊紝鎴栬呮嬁鏉emset錛屼唬鐮佷竴鍥貢楹伙紝涓嶇煡鎮(zhèn)旀敼涔熴備絾鏄笉鑳藉洜姝ゅ洜鍣庡簾椋燂紝灝卞儚鏌愪漢鍥犱負C++甯︽潵鐨勫績鏅洪棶棰樺お澶氾紝鑷繁鎼炰笉瀹氾紝鑷繁鍥㈤槦涔熸悶涓嶅畾錛屽氨璇碈++涓嶅ソ涓鏍楓?br> 鍥犳絎竴綃囨枃绔犱富瑕侀拡瀵瑰唴瀛樻潵璁層傛垜浠鐞嗗唴瀛橈紝絎竴浠朵簨灝辨槸涓嶈鏈夊唴瀛樻硠闇層傚唴瀛樻硠闇蹭笉鑳界瓑鍒版祴璇曠殑鏃跺欙紝閫氳繃闀挎椂闂磋繍琛岀▼搴忓茍瑙傚療浠誨姟綆$悊鍣ㄧ殑鏂規(guī)硶鏉ュ仛錛岃繖鏄劇劧宸茬粡鏅氫簡銆傚垢濂絍isual C++緇欎簡鎴戜滑涓涓崄鍒嗗ソ鐢ㄧ殑宸ュ叿錛歘CrtDumpMemoryLeaks鍑芥暟銆傝繖涓嚱鏁頒細鍦―ebug妯″紡涓嬪線Visual Studio鐨刼utput紿楀彛鎵撳嵃鍑洪偅涓椂鍊欎綘new錛坢alloc錛変簡浣嗘槸榪樻病delete錛坒ree錛夌殑鎵鏈夊唴瀛樺潡鐨勫湴鍧銆侀暱搴︺佸墠N涓瓧鑺傜殑鍐呭鍜屽叾浠栦俊鎭傛庝箞鍋氬憿錛熷叾瀹炲緢綆鍗曪細
1 #define _CRTDBG_MAP_ALLOC 2 #include < stdlib.h > 3 #include < crtdbg.h > 4 #include < windows.h > 5 6 int wmain(vint argc , wchar_t * args[]) 7 { 8 // 榪欓噷榪愯紼嬪簭錛屽茍鍦ㄤ笅闈㈢殑鍑芥暟璋冪敤涔嬪墠delete鎺夋墍鏈塶ew鐨勪笢瑗?/span> 9 _CrtDumpMemoryLeaks(); 10 return 0 ; 11 }
鎴戜滑鍙渶瑕佸湪娉ㄩ噴鐨勫湴鏂瑰畬鎴愭垜浠▼搴忕殑鍔熻兘錛岀劧鍚庣‘淇¤嚜宸卞凡緇廳elete鎺夋墍鏈夊簲璇elete鐨勪笢瑗匡紝鏈鍚巁CrtDumpMemoryLeaks()鍑芥暟璋冪敤鐨勬椂鍊欏氨鍙互鎵撳嵃鍑烘病琚玠elete鐨勪笢瑗夸簡銆傝繖涓柟娉曞崄鍒嗙濂囷紝鍥犱負浣犲彧闇瑕佸湪main鍑芥暟鎵鍦ㄧ殑cpp鏂囦歡榪欎箞#include涓涓嬶紝鎵鏈夌殑cpp鏂囦歡閲岄潰鐨刵ew閮戒細鍙楀埌鐩戣錛岃窡騫沖父鎵鐢ㄧ殑鐢ㄥ畯鎶妌ew緇欐崲鎺夌殑榪欑鐮存柟娉曟埅鐒朵笉鍚屻傚鏋滀綘浣跨敤浜嗗叏灞鍙橀噺鐨勮瘽涔熻灝忓績錛屽洜涓哄叏灞鍙橀噺鐨勬瀽鏋勫嚱鏁版槸鍦╩ain鍑芥暟緇撴潫涔嬪悗鎵嶆墽琛岀殑錛屽洜姝ゅ鏋滃湪鍏ㄥ眬鍙橀噺鐨勬瀽鏋勫嚱鏁伴噷闈elete鐨勪笢瑗夸粛鐒朵細琚玙CrtDumpMemoryLeaks鍑芥暟褰撴垚娉勯湶鎺夌殑璧勬簮瀵瑰緟銆傚綋鐒舵湰浜鴻涓哄叏灞鍙橀噺鍙互鐢紝浣嗘槸鍏ㄥ眬鍙橀噺鐨勮祴鍊煎繀欏誨湪main閲岄潰鍋氾紝閲婃斁涔熸槸錛岄櫎闈為偅涓叏灞鍙橀噺鐨勬瀯閫犲嚱鏁版病鏈夌敵璇蜂換浣曞唴瀛橈紝鎵浠ヨ繖涔熸槸涓涓緢濂界殑媯鏌ユ柟娉曘?br> 涓嶈繃涓婇潰涔熶粎浠呮槸涓涓憡璇変綘鏈夋病鏈夊唴瀛樻硠婕忕殑鏂規(guī)硶緗簡銆傞偅涔堝浣曢伩鍏嶅唴瀛樻硠闇插憿錛熷綋鐒跺湪璁捐涓浜涙ц兘瑕佹眰娌℃湁姣旀搷浣滅郴緇熸洿鍔犱弗鏍肩殑紼嬪簭鐨勬椂鍊欙紝鍙互浣跨敤浠ヤ笅鏂規(guī)硶錛?br> 1銆佸鏋滄瀯閫犲嚱鏁皀ew浜嗕竴涓璞?span style="COLOR: red">騫朵嬌鐢ㄦ垚鍛樻寚閽堝彉閲?/strong>淇濆瓨鐨勮瘽錛岄偅涔堝繀欏誨湪鏋愭瀯鍑芥暟delete瀹冿紝騫朵笖涓嶈兘鏈変負浜嗘煇浜涗究鍒╄屽皢榪欎釜瀵硅薄鐨勬墍鏈夋潈杞鍑哄幓鐨勪簨鎯呭彂鐢熴?br> 2銆佸湪鑳戒嬌鐢╯hared_ptr鐨勬椂鍊欙紝灝介噺浣跨敤shared_ptr銆俿hared_ptr鍙浣犱笉鍙戠敓寰幆寮曠敤錛岄偅涔堣繖涓笢瑗垮彲浠ュ畨鍏ㄥ湴浜掔浉浼犻掋侀殢渚夸綘鏀懼湪浠涔堝鍣ㄩ噷闈㈡坊鍔犲垹闄ゃ佷綘鎯蟲斁鍝噷灝辨斁鍦ㄥ摢閲岋紝鍐嶄篃涓嶇敤鑰冭檻榪欎釜瀵硅薄鐨勭敓鍛藉懆鏈熼棶棰樹簡銆?br> 3銆佷笉瑕佸湪鏈夋瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鐨勫璞′笂浣跨敤memset錛堟垨鑰卪emcpy錛夈傚鏋滀竴涓璞¢渶瑕乵emset錛岄偅涔堝湪璇ュ璞$殑鏋勯犲嚱鏁伴噷闈emset鑷繁銆傚鏋滀綘闇瑕乵emset涓涓璞℃暟緇勶紝閭d篃鍦ㄨ瀵硅薄鐨勬瀯閫犲嚱鏁伴噷闈emset鑷繁銆?span style="COLOR: red">濡傛灉浣犻渶瑕乵emset涓涓病鏈夋瀯閫犲嚱鏁扮殑澶嶆潅瀵硅薄錛岄偅涔堣涓轟粬娣誨姞涓涓瀯閫犲嚱鏁幫紝闄ら潪閭f槸鍒漢鐨凙PI鎻愪緵鐨勪笢瑗?/strong>銆?br> 4銆佸鏋滀竴涓璞℃槸緇ф壙浜嗗叾浠栦笢瑗匡紝鎴栬呮煇浜涙垚鍛樿鏍囪浜唙irtual鐨勮瘽錛岀粷瀵逛笉瑕乵emset銆傚璞℃槸鐙珛鐨勶紝涔熷氨鏄鐖剁被鍐呴儴緇撴瀯鐨勬紨鍙樹笉闇瑕佸瀛愮被璐熻矗銆傚摢澶╃埗綾婚噷闈㈠姞浜嗕竴涓猻tring鎴愬憳錛岃瀛愮被涓memset錛屽氨嬈插摥鏃犳唱浜嗐?br> 5銆佸鏋滈渶瑕佷負涓涓璞″畾涔夋瀯閫犲嚱鏁幫紝閭d箞榪炲鍒舵瀯閫犲嚱鏁般乷perator=閲嶈澆鍜屾瀽鏋勫嚱鏁伴兘鍏ㄩ儴鍐欏叏銆傚鏋滀笉鎯沖啓澶嶅埗鏋勯犲嚱鏁板拰operator=鐨勮瘽錛岄偅涔堢敤涓涓┖鐨勫疄鐜板啓鍦╬rivate閲岄潰錛岀‘淇濅換浣曡瘯鍥捐皟鐢ㄨ繖浜涘嚱鏁扮殑浠g爜閮藉嚭鐜扮紪璇戦敊璇?br> 6銆佸鏋滀綘瀹炲湪寰堝枩嬈璇█鐨勮瘽錛岄偅楹葷儲鎹竴涓彧鏀寔C涓嶆敮鎸丆++鐨勭紪璇戝櫒錛屽叏闈㈡潨緇濆洜涓鴻鐢ㄤ簡C++鑰屽鑷翠綘鐨凜鍧忔帀鐨勬儏鍐靛嚭鐜般?br> 浠涔堟槸寰幆寮曠敤鍛紵濡傛灉涓や釜瀵硅薄浜掔浉浣跨敤涓涓猻hared_ptr鎴愬憳鍙橀噺鐩存帴鎴栬呴棿鎺ユ寚鍚戝鏂圭殑璇濓紝灝辨槸寰幆寮曠敤浜嗐傚湪榪欑鎯呭喌涓嬪紩鐢ㄨ鏁頒細澶辨晥錛屽洜涓哄氨綆楀杈圭殑shared_ptr鍏ㄩ噴鏀懼厜浜嗭紝寮曠敤璁℃暟涔熶笉浼氭槸0鐨勩?br> 浠婂ぉ灝辮鍒拌繖閲屼簡錛岃繃鍑犲ぉ鎴戦珮鍏寸殑璇濆啀鍐欎竴綃囩畫闆嗭紝濡傛灉鎴戞寔緇珮鍏寸殑璇濆憿……鍡棷……銆?
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
亚洲一区日韩 |
国产欧美一区在线 |
一本色道久久88亚洲综合88 |
亚洲成色999久久网站 |
亚洲精品小视频在线观看 |
欧美wwwwww |
欧美激情视频一区二区三区在线播放
|
久久aⅴ乱码一区二区三区 |
亚洲女同在线 |
在线亚洲精品 |
久久午夜色播影院免费高清 |
久久婷婷综合激情 |
99re6热只有精品免费观看 |
99re66热这里只有精品3直播 |
欧美午夜精品久久久久久人妖
|
亚洲欧美日韩国产一区 |
欧美中文字幕 |
99热在这里有精品免费 |
亚洲一区二区三区中文字幕在线 |
黄色精品在线看 |
亚洲精品日韩综合观看成人91 |
国产精品毛片va一区二区三区 |
久久综合激情 |
欧美日韩午夜激情 |
玖玖玖国产精品 |
欧美日韩视频一区二区三区 |
久久一二三四 |
国产精品99免费看
|
亚洲国产精品一区 |
国产精品欧美在线 |
欧美国产精品中文字幕 |
国产精品免费观看视频 |
欧美激情精品久久久 |
国产精品任我爽爆在线播放 |
欧美成人精品 |
国产一区二区中文 |
在线亚洲一区 |
日韩视频在线一区二区三区 |
久久精品国产一区二区三区免费看
|
91久久综合亚洲鲁鲁五月天 |
亚洲欧美视频在线观看 |
99视频一区 |
久久亚洲精选 |
久久综合久色欧美综合狠狠 |
欧美午夜在线一二页 |
亚洲国产欧美在线人成 |
精品福利免费观看 |
亚洲欧美综合精品久久成人 |
亚洲一区二区三区高清 |
欧美黄色影院 |
亚洲大片一区二区三区 |
激情综合色综合久久综合 |
亚洲欧美日韩另类 |
午夜视黄欧洲亚洲 |
国产精品一级久久久 |
中日韩男男gay无套 |
夜夜嗨网站十八久久 |
欧美福利一区二区三区 |
欧美国产精品劲爆 |
91久久精品网 |
欧美—级高清免费播放 |
91久久久久 |
亚洲性夜色噜噜噜7777 |
欧美午夜片欧美片在线观看 |
99国产精品一区 |
亚洲无线观看 |
国产精品你懂的在线欣赏 |
中文欧美字幕免费 |
欧美涩涩网站 |
欧美暴力喷水在线 |
亚洲黄色有码视频 |
欧美国产日韩精品免费观看 |
亚洲精品国精品久久99热 |
亚洲乱码日产精品bd |
米奇777超碰欧美日韩亚洲 |
亚洲国产精品专区久久 |
一二三区精品 |
国产精品视频网址 |
久久国产主播精品 |
欧美大片国产精品 |
一区二区三区欧美在线观看 |
欧美视频一区二区三区 |
欧美一二三区精品 |
老司机免费视频久久 |
亚洲欧洲一区二区天堂久久
|
欧美日韩福利在线观看 |
亚洲一区999 |
久久一综合视频 |
亚洲国产欧洲综合997久久 |
欧美精品在线一区二区 |
亚洲一区国产 |
欧美激情中文字幕一区二区 |
一区二区三区精品视频在线观看 |
国产精品丝袜91 |
久久久久九九视频 |
日韩视频在线一区二区 |
久久久www成人免费精品 |
亚洲精品久久视频 |
国产精品一二 |
欧美成人中文字幕 |
亚洲欧美激情精品一区二区 |
欧美顶级大胆免费视频 |
午夜视频在线观看一区 |
亚洲国产另类久久久精品极度 |
欧美日韩免费一区 |
久久久噜噜噜 |
亚洲一区三区在线观看 |
欧美激情第9页 |
欧美一区二区成人6969 |
一区二区三区欧美亚洲 |
1024成人 |
国产一区香蕉久久 |
国产精品第一区 |
欧美电影专区 |
久久久久久久久久久一区
|
老牛影视一区二区三区 |
亚洲一区综合 |
亚洲精品中文字幕在线 |
国产在线不卡视频 |
国产精品日韩在线 |
欧美精品免费播放 |
狼狼综合久久久久综合网 |
亚洲综合久久久久 |
亚洲免费黄色 |
亚洲国产精品99久久久久久久久 |
久久国产精品一区二区三区四区 |
夜夜嗨av一区二区三区中文字幕 |
雨宫琴音一区二区在线 |
国产欧美精品在线 |
国产农村妇女精品一区二区 |
欧美午夜剧场 |
欧美性大战久久久久久久 |
欧美激情在线 |
欧美人交a欧美精品 |
欧美 亚欧 日韩视频在线 |
久久三级视频 |
久久亚洲国产成人 |
久久裸体视频 |
久久野战av |
久久aⅴ国产紧身牛仔裤 |
久久精品国产亚洲aⅴ |
午夜精品一区二区三区电影天堂
|
亚洲国产精品久久久久婷婷884
|
亚洲剧情一区二区 |
亚洲精选成人 |
亚洲毛片在线免费观看 |
aⅴ色国产欧美 |
一区二区三区四区五区在线 |
一区二区三区免费在线观看 |
亚洲桃花岛网站 |
亚洲免费中文字幕 |
午夜亚洲福利在线老司机 |
久久国产加勒比精品无码 |
久久久久久9 |
欧美国产精品劲爆 |
亚洲精品国产精品久久清纯直播 |
亚洲精品久久久久久久久久久 |
亚洲人成啪啪网站 |
亚洲手机在线 |
欧美在线播放 |
美女国内精品自产拍在线播放 |
欧美大色视频 |
国产精品美女一区二区在线观看 |
国产伦精品一区二区三区视频黑人
|
久久青草久久 |
欧美精品一区二区精品网
|
国产日韩一区在线 |
亚洲高清在线观看 |
亚洲视频电影在线 |
久久爱www久久做 |
亚洲缚视频在线观看 |
中文在线不卡视频 |
久久久综合精品 |
欧美吻胸吃奶大尺度电影 |
国产午夜精品一区二区三区视频 |
亚洲激情视频 |
欧美一区国产一区 |
欧美高清视频在线 |
亚洲一区久久 |
欧美www视频 |
国产一二三精品 |
99精品国产热久久91蜜凸 |
久久国产精品黑丝 |
亚洲精品婷婷 |
久久深夜福利 |
国产欧美一区二区三区久久
|
亚洲欧美综合v |
欧美激情小视频 |
亚洲欧美日韩精品 |
欧美国产在线视频 |
国产一区亚洲一区 |
午夜精品久久久久久久蜜桃app
|
一区视频在线播放 |
午夜亚洲激情 |
99日韩精品 |
欧美成人免费全部 |
激情五月综合色婷婷一区二区 |
亚洲一区成人 |
亚洲片国产一区一级在线观看 |
久久久精品一区二区三区 |