我有一个类,它使用shared_ptr作为成员变量,我想初始化为nullptr。为什么这不正确?编译器错误消息是:"删除:无法删除不是指针的对象"。
<div class="form-inline clearfix">
<div class="nested-fields">
<%= f.input :cow_id, :input_html => { :cow_id => :cow } %>
<%= f.input :quantity, input_html: {class: "form-input form-control"} %>
<%= link_to_remove_association "Supprimer", f, class: "form-button btn btn-default" %>
</div>
</div>
我认为这会创建我的shared_ptr并将它初始化为nullptr。
正确的构造函数会是什么样的?
答案 0 :(得分:3)
make_shared<Example<T>>
是一个函数,而不是函数调用。将shared_ptr
初始化为函数没有意义。您得到的错误是因为shared_ptr
在shared_ptr
被销毁时尝试删除该函数,但无法删除函数。
我想初始化为nullptr
然后你根本不需要make_shared
。只需将其初始化为nullptr
即可。 (或者,正如评论中指出的那样,完全省略了初始化,因为nullptr
是shared_ptr
的默认值。)
答案 1 :(得分:0)
我有一个类,它使用shared_ptr作为成员变量,我 想要初始化为nullptr。
太好了,什么都不做。 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mysql.so' - /usr/lib/php/20151012/mysql.so: undefined symbol: _zend_list_find in Unknown on line 0.
的默认构造函数无论如何都会使指针无效。你不需要做任何事情。
std::shared_ptr
首先,如果您致电Example() : myptr(make_shared<Example<T>>), val(0) {}
,那么您可以确定指定的make_shared
不会为空,您正在分配新构建的托管对象!它就像调用shared_ptr
并用共享指针包装它一样,它不会使对象无效。
但如果您确实要调用new
,则需要像常规函数调用一样添加括号:
make_shared