Nếu bạn muốn thực hiện các hoạt động phi-aliased trên đối tượng cơ bản gắn liền với một con trỏ chia sẻ bạn một cách rõ ràng có thể uỷ thác cho một thói quen lao động mà phải mất một tham số con trỏ phi-aliased:
void worker (mytype *__restrict x, mytype *__restrict y)
{
// do something with x, y with a no-alias guarantee
}
int main()
{
std::shared_ptr<mytype> p(new mytype);
std::shared_ptr<mytype> q(new mytype);
// explicitly delegate the shared object
worker(p.get(), q.get());
return 0;
}
Tôi không chắc chắn chính xác những gì bạn có trong tâm trí, nhưng điều này sẽ cho phép quản lý bộ nhớ cấp cao được xử lý an toàn bằng con trỏ thông minh, trong khi thực hiện công việc mức thấp có thể là hiệu quả hơn với con trỏ không có bí danh.
Như @BenVoigt chỉ ra, restrict
chỉ là một phần chính thức của c99
- c++
không phải là nghĩa vụ phải biết gì về nó. MSVC
vẫn hỗ trợ nó qua __restrict
và như bạn đã nói GCC
có __restrict__
.
Hy vọng điều này sẽ hữu ích.
Nguồn
2012-01-29 00:52:33
C++ không có bất kỳ từ khóa 'hạn chế' hoặc' __restrict__' nào. Nếu bạn đang hỏi về các phần mở rộng ngôn ngữ trong một trình biên dịch cụ thể, bạn cần phải nói. –
@BenVoigt xin lỗi - được làm rõ trong chỉnh sửa. – James
Có vẻ như không chắc rằng một finction muốn làm việc trên con trỏ bị hạn chế muốn yêu cầu quyền sở hữu chung của con trỏ. Chưa kể rằng trong một hệ thống với quyền sở hữu chia sẻ, bạn sẽ biết rằng con trỏ thực sự khác biệt. Trong mọi trường hợp, tôi đoán hàm của bạn actualky muốn dùng con trỏ [bị giới hạn] thay vì 'std :: shared_ptr' s. –