0Pricing
C++ Academy · Pelajaran

Jebakan dan Masa Hidup

Hindari view yang menggantung

Jebakan dan Masa Hidup adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Tampilan Tidak Memiliki Data

string_view hanya menunjuk ke karakter yang dimiliki di tempat lain. Jika penyimpanan tersebut hilang, tampilan menjadi menggantung dan mengaksesnya menghasilkan perilaku yang tidak terdefinisi.

Tampilan Menggantung dari Objek Sementara

Mengikat tampilan ke std::string sementara berbahaya: objek sementara tersebut berakhir masa hidupnya di akhir pernyataan, sehingga tampilan menunjuk ke memori yang sudah dibebaskan.

#include <string>
#include <string_view>
std::string make() { return "temp"; }
int main() {
    std::string_view sv = make(); // dangles immediately
    // using sv here is undefined behavior
    (void)sv;
}

Mengembalikan Tampilan ke Variabel Lokal

Jangan pernah mengembalikan tampilan yang menunjuk ke dalam string lokal; variabel lokal tersebut dihancurkan ketika fungsi selesai.

#include <string>
#include <string_view>
std::string_view bad() {
    std::string local = "oops";
    return local; // local dies, view dangles
}
int main() { (void)bad(); }

Aman: Tampilan dari String yang Masih Hidup

Tampilan aman selama sumbernya tetap hidup lebih lama daripada tampilan tersebut. Di sini, string tetap hidup selama seluruh fungsi berlangsung.

#include <iostream>
#include <string>
#include <string_view>
int main() {
    std::string s = "alive";
    std::string_view sv = s;
    std::cout << sv << "\n"; // safe
}

Tidak Diakhiri Nul

Data sebuah tampilan tidak dijamin diakhiri dengan \0. Meneruskan sv.data() ke fungsi C yang mengharapkan string C dapat menyebabkan pembacaan melewati akhir.

Gunakan size(), Bukan strlen

Selalu gunakan sv.size() untuk memperoleh panjang, bukan fungsi string C, karena tampilan dapat berupa irisan dari penyangga yang lebih besar.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = std::string_view("hello world").substr(0, 5);
    std::cout << sv.size() << "\n"; // 5, not 11
}

Mengubah Sumber

Jika string yang mendasarinya dialokasikan ulang (misalnya oleh push_back yang memperbesar kapasitasnya), tampilan yang sudah ada ke dalam string tersebut menjadi tidak valid.

Menyimpan Tampilan sebagai Anggota

Berhati-hatilah saat menyimpan string_view sebagai anggota kelas; Anda harus menjamin bahwa data yang dirujuk tetap hidup lebih lama daripada objek. Jika ragu, simpan std::string sebagai gantinya.

Parameter Biasanya Aman

Menggunakan string_view sebagai parameter fungsi merupakan kasus yang aman dan lazim: argumennya tetap hidup selama pemanggilan berlangsung.

#include <iostream>
#include <string_view>
size_t len(std::string_view sv) { return sv.size(); }
int main() {
    std::cout << len("temporary is fine here") << "\n";
}

Salin Jika Harus Dipertahankan

Jika Anda perlu menyimpan teks setelah masa hidup sumbernya berakhir, salin teks tersebut ke dalam std::string. Penyalinan adalah harga yang harus dibayar untuk memiliki data.

#include <string>
#include <string_view>
std::string keep(std::string_view sv) {
    return std::string(sv); // owns a copy
}
int main() { (void)keep("persist"); }

Aturan Praktis

Utamakan string_view untuk parameter dan variabel lokal yang berumur pendek. Hindari menggunakannya sebagai tipe pengembalian atau anggota yang berumur panjang, kecuali masa hidup data jelas lebih lama.

Uji Cepat

Periksa pemahaman Anda tentang masa hidup tampilan.

Rangkuman

Anda telah mempelajari jebakan dan masa hidup tampilan:

  • Tampilan tidak memiliki data; sumbernya harus tetap hidup lebih lama daripada tampilan.
  • Hindari tampilan yang merujuk ke objek sementara dan variabel lokal.
  • Tampilan tidak dijamin diakhiri nul; gunakan size().
  • Salin ke dalam std::string ketika Anda perlu mempertahankan teks.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Jebakan dan Masa Hidup” gratis?

Ya — teks lengkap “Jebakan dan Masa Hidup” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Jebakan dan Masa Hidup”?

Hindari view yang menggantung Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Jebakan dan Masa Hidup” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa string_view
  2. Membuat View
  3. Jebakan dan Masa Hidup
  4. Algoritme String
← Kembali ke C++ Academy