std :: containers调用的复制构造函数是否包含复制构造函数?

Cas*_*sey 1 c++ containers std deep-copy copy-constructor

包含对象指针的任何std :: container(特别是std :: queue)的复制构造函数是否调用成员的复制构造函数以允许深层复制,或者它是否对指针值执行浅复制?

例:

/*******************************************************************************
 * <summary>
 *  Initializes a new instance of the EventHandler class.
 * </summary>
 *
 * <param name="handler">The handler to copy.</param>
*******************************************************************************/
EventHandler::EventHandler(const EventHandler& handler) : _eventQueue(handler._eventQueue) { }
Run Code Online (Sandbox Code Playgroud)

_eventQueue声明为:std::queue<Event*> _eventQueue;其中Event是具有复制构造函数的Base类,并且具有多个具有自己的复制构造函数的派生类.

PS:我喜欢AtomineerUtilsVisualAssistX(尤其是合并时!:D)

编辑:

鉴于下面的答案,这是一个正确的方式来创建原件的副本,使原件未经修改或复制是否与原件相反(简单的修复,但仍然是一个重要的区别)?

EventHandler::EventHandler(const EventHandler& handler) {
    for(size_t i = 0; i < handler._eventQueue.size(); ++i) {
        this->_eventQueue.push(new Event(handler._eventQueue._Get_container().at(i)));
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ork 5

它执行深层复制(在包含的对象上).

因此,所有包含的元素都将复制到新容器中.

但由于你的容器包含指针,

std::queue<Event*>   eventQueue;
Run Code Online (Sandbox Code Playgroud)

它只是复制指针Event*(因为这是包含的对象).在这种情况下,容器元素指向的对象不会被复制..