Computer >> Máy Tính >  >> Lập trình >> C ++

Con trỏ, con trỏ thông minh và con trỏ dùng chung trong C ++

Con trỏ

Con trỏ được sử dụng để lưu trữ địa chỉ của biến.

Cú pháp

Type *pointer;

Khởi tạo

Type *pointer;
Pointer = variable name;

Chức năng

  • con trỏ được sử dụng để lưu trữ địa chỉ của biến.
  • con trỏ có thể được gán giá trị null.
  • con trỏ có thể được tham chiếu bằng cách chuyển qua tham chiếu.
  • một con trỏ có địa chỉ bộ nhớ và kích thước riêng của nó trên ngăn xếp.

Ví dụ

#include <iostream>
using namespace std;
int main() {
   // A normal integer variable
   int a = 7;
   // A pointer variable that holds address of a.
   int *p = &a;
   // Value stored is value of variable "a"
   cout<<"Value of Variable : "<<*p<<endl;
   // It will print the address of the variable "a"
   cout<<"Address of Variable : "<<p<<endl;
   // reassign the value.
   *p = 6;
   cout<<"Value of the variable is now: "<<*p<<endl;
   return 0;
}

Đầu ra

Value of Variable : 7
Address of Variable : 0x6ffe34
Value of the variable is now: 6

Con trỏ thông minh trong C ++

Con trỏ thông minh là một kiểu dữ liệu trừu tượng bằng cách sử dụng nó, chúng ta có thể tạo một con trỏ bình thường theo cách mà nó có thể được sử dụng làm quản lý bộ nhớ như xử lý tệp, ổ cắm mạng, v.v., nó cũng có thể làm nhiều việc như hủy tự động, đếm tham chiếu, v.v.

Con trỏ thông minh trong C ++, có thể được triển khai dưới dạng lớp mẫu, được nạp chồng bằng toán tử * và ->. auto_ptr, shared_ptr, unique_ptr và yếu_ptr là các dạng con trỏ thông minh có thể được thực hiện bởi các thư viện C ++.

Ví dụ

#include<iostream>
using namespace std;
// A generic smart pointer class
template <class T>
class Smartpointer {
   T *p; // Actual pointer
   public:
      // Constructor
      Smartpointer(T *ptr = NULL) {
         p = ptr;
      }
   // Destructor
   ~Smartpointer() {
      delete(p);
   }
   // Overloading dereferencing operator
   T & operator * () {
      return *p;
   }
   // Overloding arrow operator so that members of T can be accessed
   // like a pointer
   T * operator -> () {
      return p;
   }
};
int main() {
   Smartpointer<int> p(new int());
   *p = 26;
   cout << "Value is: "<<*p;
   return 0;
}

Đầu ra

Value is: 26

Con trỏ dùng chung trong C ++

shared_ptr là một trong những dạng con trỏ thông minh có thể được thực thi bởi các thư viện C ++. Nó là một vùng chứa con trỏ thô và đếm tham chiếu (một kỹ thuật lưu trữ số lượng tham chiếu, con trỏ hoặc xử lý tới một tài nguyên chẳng hạn như một đối tượng, khối bộ nhớ, không gian đĩa hoặc các tài nguyên khác) cấu trúc quyền sở hữu của con trỏ được chứa trong nó. với tất cả các bản sao của shared_ptr.

Một đối tượng được tham chiếu bởi con trỏ raw chứa sẽ chỉ bị hủy khi tất cả bản sao của shared_ptr bị hủy.

Ví dụ

#include<iostream>
#include<memory>
using namespace std;
int main() {
   shared_ptr<int> ptr(new int(7));
   shared_ptr<int> ptr1(new int(6));
   cout << ptr << endl;
   cout << ptr1 << endl;
   // Returns the number of shared_ptr objects
   // referring to the same managed object.
   cout << ptr.use_count() << endl;
   cout << ptr1.use_count() << endl;
   // Relinquishes ownership of ptr on the object
   // and pointer becomes NULL
   ptr.reset();
   cout << ptr.get() << endl;
   cout << ptr1.use_count() << endl;
   cout << ptr1.get() << endl;
   return 0;
}

Đầu ra

0xe80900
0xe80940
1
1
0
1
0xe80940