cuốn sách gpt4 ai đã làm

Trả về const char*; tĩnh xấu đến mức nào?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:57:29 hai mươi bốn 4
mua khóa gpt4 Nike

Vì những lý do ngoài tầm kiểm soát của tôi, tôi cần phải quay lại từ hàm const char*, nhưng tôi không biết ký tự Những gì cần có vào thời gian biên dịch. Giải pháp của tôi trông như thế này:

const char* __str__() {
static std::string Chuỗi;
String = [một số thứ ưa thích];
trả về String.c_str();
}

static Điều này ngăn chuỗi bị hủy khi thoát khỏi hàm, nhưng nó cũng có nghĩa là bộ nhớ vẫn tồn tại cho đến khi chương trình của tôi thoát (phải không?). Bởi vì chuỗi trả về đôi khi có thểrất lớn (GB), đây có thể là một vấn đề thực sự.

Tôi thường tránh con trỏ bằng mọi giá và chỉ sử dụng chúng cho các thành viên trong lớp static, vì vậy tôi không chắc chắn 100% về việc mình đang làm. Điều này có được đảm bảo để làm việc? Có cách nào tốt hơn?

[Bối cảnh của câu hỏi này là in một đối tượng phức tạp trong python, sử dụng__str__phương pháp. Tôi xác định phương thức trong mã C++ của mình và sau đó gói nó bằng SWIG. Ví dụ SWIG cho thấy static sử dụng, nhưng tôi không rõ ràng rằng đây là cách duy nhất. Tôi sẵn sàng đón nhận các đề xuất. ]

câu trả lời hay nhất

static Có các vấn đề khác ngoài việc chỉ định phạm vi:

  • Các chức năng không được nhập lại
  • Không có cách nào để dọn dẹp khi người gọi hoàn tất việc trả lại giá trị

Bất kỳ lý do nào không trả lại giá trị và để người gọi giải phóng nó? :

const char* __str__() {
char *s = malloc(2 * 1024 * 1024 * 1024); // 2 GB
[một số thứ lạ mắt với s];
trả lại s;
}

...

const char *magic = __str__();
[làm điều gì đó với phép thuật]
miễn phí (ma thuật); ma thuật = NULL // tất cả đã xong

Về c++ - trả về const char*; tĩnh xấu đến mức nào? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/9814040/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress