Tôi có một cấu trúc:Đúc shared_ptr <T> để shared_ptr <void>
struct Params {
std::shared_ptr<void> user_data;
/* ... */
};
Tôi muốn sử dụng nó như thế này:
int main() {
std::shared_ptr<SpecializedParams> sp(new SpecializedParams(100));
Params params;
/* ... */
params.user_data = std::static_pointer_cast<void>(sp);
/* ... */
std::shared_ptr<SpecializedParams> sp2 =
std::static_pointer_cast<SpecializedParams>(
params.user_data
);
/* ... */
return 0;
}
Đây có phải là hợp lệ và an toàn không?
Thông số trong khối chính là gì? –
Bạn không thể 'xóa' một con trỏ trống, vì vậy mã của bạn không được biên dịch. –
@KerrekSB chia sẻ con trỏ để vô hiệu hóa chắc chắn là hợp lệ. Xem ở đây để biết thêm chi tiết: http://stackoverflow.com/questions/5913396/why-do-stdshared-ptrvoid-work –