Rumah >pembangunan bahagian belakang >C++ >Bila Perlu Melalui Rujukan atau Penunjuk dalam C : Prinsip Panduan?

Bila Perlu Melalui Rujukan atau Penunjuk dalam C : Prinsip Panduan?

Patricia Arquette
Patricia Arquetteasal
2024-11-12 16:31:01778semak imbas

When to Pass by Reference or Pointer in C  : A Guiding Principle?

Melalui Rujukan atau Penunjuk dalam C : Prinsip Panduan

Dalam C , memahami bila menggunakan rujukan lulus dan bila menggunakan penunjuk adalah penting. Amalan ini boleh membawa kepada kod yang cekap dan bebas ralat.

Situasi Umum

  • Meluluskan std::string ke fungsi:

    • foo(std::string*) atau foo(std::string&)?
  • Meluluskan tr1::shared_ptr ke fungsi:

    • foo(tr1::shared_ptr* ptr ) atau foo(tr1::shared_ptr& ptr)?

Petunjuk lwn. Rujukan

Melalui rujukan menawarkan ketekalan, kerana setiap objek boleh dianggap sebagai rujukan. Walau bagaimanapun, melalui penuding memberikan fleksibiliti untuk mengendalikan nullptrs dan literal.

Analisis Coretan

Coretan yang diberikan:

map<string, shared_ptr<vector<string>> > adjacencyMap;
vector<string>* myFriends = new vector<string>();
myFriends->push_back(string("a"));
myFriends->push_back(string("v"));
myFriends->push_back(string("g"));
adjacencyMap["s"] = shared_ptr<vector<string> >(myFriends);

menyerlahkan keperluan untuk mempertimbangkan sifat kedua-dua rujukan dan petunjuk:

  • The kekunci peta menggunakan rujukan, menjamin kecekapan memori.
  • Penunjuk vektor membenarkan peruntukan dinamik, memudahkan penambahan vektor.

Peraturan Ibu Jari

Akhirnya, pilihan yang sesuai bergantung pada keperluan khusus. Sebagai prinsip panduan, pertimbangkan:

  • Gunakan rujukan: Untuk penggunaan memori yang cekap dan apabila anda telah menjamin akses kepada objek yang dirujuk.
  • Gunakan petunjuk: Apabila mengendalikan nullptrs, bekerja dengan memori dinamik atau apabila anda perlu mengubah suai rujukan sendiri.

Atas ialah kandungan terperinci Bila Perlu Melalui Rujukan atau Penunjuk dalam C : Prinsip Panduan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn