Tôi cố gắng viết lớp nàyhành vi kỳ lạ cho unique_pointer trong Visual Studio 2010
#include <memory>
class ContainerUnique
{
public:
ContainerUnique(void);
~ContainerUnique(void);
private:
std::unique_ptr<UniqueElement> u;
};
đâu UniqueElement là một lớp POD được xác định ở nơi khác. Bây giờ tôi xác định phần thân của hàm tạo như sau:
ContainerUnique::ContainerUnique(void)
{
auto tmp = new UniqueElement(1);
this->u(tmp); // u is a unique_ptr<UniqueElement>. Should this call compile?
}
Và nó không tuân thủ ngoại lệ. Chạy chương trình tôi thấy rằng sau khi hàm tạo của ContainerUnique
đã được gọi, u
chứa một con trỏ rỗng.
Đây có phải là hành vi dự định không? Và tôi đang gọi phương thức unique_ptr nào?
Không chắc chắn về các sự cố bạn đang gặp phải. Nhưng tránh chúng bằng cách khởi tạo biến thành viên u trong danh sách initialaztrion của hàm tạo. –
Vâng, đó là giải pháp tôi đã sử dụng trong mã thực sự của mình, nhưng tôi vẫn không chắc chắn về những gì đang xảy ra trong ví dụ. –
Thử in loại biến số tự động của bạn. Không chắc chắn nếu typeid hoạt động. Một khi bạn biết loại phần còn lại nên dễ dàng. –