Is usage of friend class appropriate in this case?
Personally, I don't have major objections with that design. It gets the job done in a fairly straightforward way. But it does creates coupling, which might become a nuisance to you as the project grows. So another option with less coupling, as mentioned in comments, would be defining a default parameterized constructor:

class Object {
public:
    Object(&lt;several params&gt;);
private:
    &lt;the data&gt;
};

class Loader {
public:
    Object LoadObject()
    {
        // many fields of data...
        int a    = ...
        double b = ...
        std::vector&lt;int&gt; c = ...

        return Object(a, b, std::move(c), ...);
    }
};


In C++11, you also don't have to worry about unnecessary copies of complex objects such as a std::vector. You can make the constructor take a move ref, e.g.: std::vector&lt;int&gt; &amp;&amp; vec and apply std::move in the call site.