It won't be moved. Because you have a user declared copy constructor, copy assignment operator and destructor, the move constructor and move assignment operator will not be generated. Actually, any one of those three declared would suppress automatic generation of the move constructor and move assignment operator.
If you want to make it more C++11 friendly, you could add a move constructor and move assignment operator, as in (warning: never compiled or tested):
class iconv_wrapper
{
public:
iconv_wrapper() : m_iconv(iconv_open()) {}
~iconv_wrapper() { if ((iconv_t)-1 != m_iconv) iconv_close(m_iconv); }
iconv_wrapper(iconv_wrapper&& that) noexcept { std::swap(m_iconv, that.m_iconv); }
iconv_wrapper& operator=(iconv_wrapper&& that) noexcept { std::swap(m_iconv, that.m_iconv); return *this; }
private:
iconv_t m_iconv = (icontv_t)-1;
};
A reason you might want to do this is so you can store these objects (or other types which contain these objects) in a vector.