Mea Sese Masani i le Polokalama C++ ma le Auala e Fa'aleleia ai
O le polokalameina o le C++ o se tasi o gagana polokalame e sili ona mamana ma fetuutuunai. Faatasi ai ma lona gafatia e lagolago ai polokalame fa'atino, fa'atatau i mea faitino, ma polokalame lautele, e fa'aaogaina lautele le C++ i le tele o talosaga, mai faiga fa'aoga i polokalame ta'aloga maualuga. Peita'i, e pei o so'o se gagana polokalame, e iai fo'i i le C++ le tele o mea sese masani e masani ona feagai ma tagata atia'e, o tagata fou ma tagata ua i ai le poto masani. O lenei tusiga o le a talanoaina ai nisi o mea sese masani i le polokalameina o le C++ ma tu'uina atu ai ta'iala i le auala e fa'aleleia ai.
1. Fa'aaogaina o Fa'ailoga e le'i Fa'alauiloaina
Sese:
E mafai e se fa'asino e le'i fa'auluina ona fa'asino i se nofoaga e le iloa o le manatua, ma mafua ai se amioga e le'i mafaufauina pe fa'aletonu ai se polokalame. O se fa'ata'ita'iga o lenei mea sese e fa'apea:
“`cpp
int ptr; // e le'i amataina le ptr
ptr = 10; // Sese: e le'i amataina le fa'asino
""
Auala e Fa'aleleia ai:
Fa'aulufale le fa'asino (pointer) a'o le'i fa'aaogaina. E mafai ona e fa'aulufaleina i le `nullptr` pe fa'atasi ai ma se tuatusi manatua aoga.
“`cpp
int ptr = nullptr; // Fa'aulufale i le nullptr
int tau = 10;
ptr = &taua;
ptr = 20; // Ua saogalemu nei
""
2. Sese i le Puleaina o le Manatua (Memory Leak)
Sese:
E tupu se fa'aletonu o le manatua pe a le toe fa'asa'olotoina le manatua ua atofaina. E mafai ona mafua ai ona fa'aogaina e se talosaga le tele o le manatua i le aluga o taimi, ma iu ai ina le lava le manatua.
“`cpp
int ptr = fou int[10];
// Galo e tape le manatua ua atofaina
""
Auala e Fa'aleleia ai:
Ia mautinoa i taimi uma e fa'asa'oloto le manatua ua atofaina e fa'aaoga ai le `delete` po'o le `delete[]` e fuafua i le mea na fa'aaogaina e vaevaeina ai.
“`cpp
int ptr = fou int[10];
// Fa'aaogāina o le manatua…
tape[] ptr; // Manatua ua tu'uina atu fua
""
Faaaoga se faletusi fa'asino atamai (e pei o le `std::unique_ptr` po'o le `std::shared_ptr`) e fa'afaigofie ai le puleaina o le manatua.
“`cpp
aofia
std::unique_ptr ptr(int fou[10]);
// O le a otometi lava ona tatalaina le manatua pe a alu ese le ptr mai le scope
""
3. Mea Sese i le Faʻaaogaina o Faʻasinomaga
Sese:
O le toe faʻafoʻiina o se faʻasinomaga poʻo se faʻasino i se fesuiaʻiga i le lotoifale ua alu ese mai le laʻasaga e mafai ona mafua ai amioga e leʻi faʻamoemoeina.
“`cpp
int& maua le Fa'asinomaga() {
int tau = 10;
toe faafoi le tau; // Sese: toe faafoi mai o se faasinomaga i se fesuiaiga i le lotoifale
}
""
Auala e Fa'aleleia ai:
Aloese mai le toe faafoiina o faasinomaga i fesuiaiga i le lotoifale. Nai lo lena, faaaoga fesuiaiga tumau, pe sili atu, toe faafoi mai tau, pe mafaufau e faaaoga mea faitino.
“`cpp
int maua le Taua() {
int tau = 10;
toe faafoi mai le tau; // Saogalemu
}
""
4. Aua le amana'ia Savali ma Lapata'iga Fa'aletonu a le Compiler
Sese:
E masani ona le amana'ia e le au polokalame ia savali sese ma lapataiga e tuuina mai e le compiler, e ui lava o nei savali o loo tuuina atu ai faamatalaga taua e uiga i mea sese e ono tutupu.
Auala e Fa'aleleia ai:
Siaki ma malamalama i taimi uma i savali sese ma lapataiga e faia e le compiler. Fa'agaoioia lapataiga maualuga e fa'amautinoa ai le sili atu ona mama o le code.
Mo se faʻataʻitaʻiga i le GCC, faʻaaoga le fuʻa `-Wall` e faʻateleina ai lapataʻiga.
“`tu'i
g++ -Wall -o polokalame autu.cpp
""
5. Sese i le Soona Fa'atumuina e le Tagata Fa'agaoioia
Sese:
O le soona fa'atumu sese o le telefoni feavea'i e mafai ona mafua ai ni amioga e le'i mafaufauina pe ni mea sese i le taimi e fa'agaoioia ai.
“`cpp
vasega MyClass {
le Malo:
fa'amaumauga int;
MyClass operator+ (const MyClass& isi) {
toe faafoi mai fa'amaumauga + isi.fa'amaumauga; // Sese: e tatau ona toe faafoi mai le MyClass
}
};
""
Auala e Fa'aleleia ai:
Ia mautinoa o le fa'agaioiga ua overloaded e toe fa'afo'i mai le ituaiga talafeagai ma fa'asaoina mea e le suia o le vasega.
“`cpp
vasega MyClass {
le Malo:
fa'amaumauga int;
MyClass operator+ (const MyClass& isi) {
I'uga o le MyClass;
iʻuga.faʻamaumauga = faʻamaumauga + isi.faʻamaumauga;
toe faafoi mai le i'uga; // Toe faafoi mai se mea mai le MyClass
}
};
""
6. Fa'aaogāina Sese o Macros
Sese:
O nisi taimi e faʻaaogaina soona fai pe faʻaaogaina sese ai Macros, lea e mafai ona oʻo atu ai i ni mea sese e faigata ona iloa i le taimi e faʻagaoioia ai.
“`cpp
fa'amatala le SQUARE(x) xx
int taunuuga = SQUARE(5 + 1); // Sese: o le taunuuga e 5 + 1 5 + 1
""
Auala e Fa'aleleia ai:
Suia macros i fa'aupuga tumau po'o fa'ata'ita'iga mo se puipuiga sili atu o ituaiga ma le pulea.
“`cpp
mamanu
T sikuea(T x) {
toe faafoi xx;
}
int iʻuga = sikuea(5 + 1); // Saogalemu e faʻaaoga
""
7. Fa'aaogā Sese o Galuega Fa'atino Fa'a-C
Sese:
Fa'aaogaina o galuega fa'atino fa'a-C e pei o le `strcpy` po'o le `sprintf` lea e faigofie ona a'afia i le buffer overflow.
“`cpp
char src[] = "Talofa, Lalolagi!";
uiga fa'ai'u[5];
strcpy(dest, src); // Sese: ua sosolo le buffer
""
Auala e Fa'aleleia ai:
Faaaoga galuega faatino C++ e sili atu le saogalemu e pei o le `std::string` po'o le `std::vector`.
“`cpp
aofia
std::string src = “Talofa, Lalolagi!”;
std::string dest = src;
""
8. Le Amana'iaina o le Iloa o Mea Sese
Sese:
Aua le amana'ia le siakiina o mea sese i fa'agaioiga I/O po'o galuega e ono le manuia.
“`cpp
std::ifstream faila(“data.txt”);
// Sese: e le'i siakiina pe ua manuia le tatalaina o le faila
""
Auala e Fa'aleleia ai:
Ia siaki i taimi uma pe na manuia le fa'agaioiga ma taulima mea sese i se auala talafeagai.
“`cpp
std::ifstream faila(“data.txt”);
afai (!faila) {
std::cerr << “Ua le mafai ona tatala le faila” << std::endl;
toe foʻi 1;
}
""
9. Fa'atinoina o le Ta'amilosaga e Le Lelei Tele
Sese:
O le faʻaaogaina o ni faʻasologa e le lelei atoatoa e mafai ona mafua ai le faʻaitiitia o le faʻatinoga o le polokalame.
“`cpp
mo (int i = 0; i < vec.size(); i++) {
// Fa'agasologa ma le vec[i]
// Sese: tele() ua vala'auina i taimi uma e faia ai
}
""
Auala e Fa'aleleia ai:
Fa'aleleia atili fa'asologa o galuega e ala i le fa'aitiitia o vala'au fa'atino soo.
“`cpp
mo (std::size_t i = 0, n = vec.size(); i < n; i++) {
// Fa'agasologa ma le vec[i]
}
""
Fa'aaoga fo'i fa'aoga o algorithms STL e pei o le `std::for_each` mo nisi fa'aleleiga.
“`cpp
aofia
std::for_each(vec.amata(), vec.fa'ai'uga(), [](int &taua) {
// Fa'agasologa ma le taua
});
""
10. Sese i le Taulimaina o le Filo
Sese:
O le sese o le taulimaina o filo e mafai ona o'o atu ai i tulaga o le tuuga po'o le le feutana'i ai.
“`cpp
aofia ai le void run() {
// Sese: Atonu e tupu le tulaga o le tuuga
}
std::thread t1(tamo'e);
std::thread t2(tamo'e);
""
Auala e Fa'aleleia ai:
Faaaoga ni faiga fa'avae o le synchronization e pei o mutexes e puipuia ai tulaga o le race ma deadlocks.
“`cpp
aofia ai aofia ai
std::mutex mtx;
leai se aoga tamoe() {
std::lock_guard loka(mtx);
// O se faiga e saogalemu mai tulaga o le tuuga
}
std::thread t1(tamo'e);
std::thread t2(tamo'e);
t1.auai();
t2.auai();
""
I'uga
O le C++ o se gagana polokalame malosi ma fetuutuunai, ae e faigofie foʻi ona i ai ni mea sese masani, aemaise lava e fesoʻotaʻi ma le puleaina o manatua ma le faʻasino. O le malamalama i nei mea sese ma le iloa pe faʻapefea ona faʻaleleia, e mafai ona e atiina ae ni polokalama e sili atu ona faʻatuatuaina ma lelei. Ia manatua e te gauaʻi atu i taimi uma i savali a le faʻaputuga, faʻaaoga meafaigaluega faʻaonaponei e fesoasoani ia te oe e tusi ai ni code saogalemu , ma faʻaauau pea ona faʻaleleia ou tomai i le malamalama ma le faʻaaogaina o faiga sili ona lelei o le polokalameina o le C++.