为什么C ++不提供默认的“ copy-plus-allocator”?功能缺失吗?

时间:2019-05-04 04:14:06

标签: c++ c++17 allocator default-copy-constructor

我创建了一个问题(switching to another different custom allocator -> propagate to member fields),发现在每个提出的解决方案中,我必须手动将分配器传播到每个成员字段。

例如,如果用户要复制C的实例,但又希望新实例使用不同分配器,则最好的方法之一是:-< / p>

class C{     
    ContainerLikeClass1 b1;      //: is a container type
    ContainerLikeClass2 b2;      //: is a container type
    PlainOldDataLike b3;         //: not a container type
    C(const C& other, const allocator_type & alloc){   //#1
        b1=ContainerLikeClass1(other.b1,alloc);  //<-- manually hard code
        b2=ContainerLikeClass2(other.b2,alloc);  //<-- manually hard code
        b3=other.b3;                             //<-- manually hard code
    }
}

上述功能不会像copy constructormove constructorcopy assignment operatormove assignment operator那样自动生成。

(^也可以从an answerUsing custom allocator for AllocatorAwareContainer data members of a class看到该模式。)

请注意,如果字段很多(b1b2b3)会很不方便。
如果我错过其中之一,则可能是一个错误。

most-voted answer there(JaMiT's)建议,如果我真的想要简单的方法,可以调用默认函数(如下)。

//modified by me a little
C(const C& c, const allocator_type & alloc) : C(c) {
     //#2
     b1=ContainerLikeClass1(other.b1,alloc);  //<-- manually hard code
     b2=ContainerLikeClass2(other.b2,alloc);  //<-- manually hard code
     //b3=other.b3;   //<-- no need
}     
// also add C's default copy constructor = default

但是,有两个缺点:1.副本2产生了额外费用。它仍然没有完全自动生成。

问题

为什么C ++不提供默认的“ copy-plus-allocator”? (例如#1
围绕着分配器的编码必须繁琐且难以维护吗?
是“分配器”只是(太)很少使用(或实验性)的功能,因此相对而言不值得多加注意吗?
我想念什么? //<-- I believe this is the most correct question.

我是C ++分配器的新手。

0 个答案:

没有答案