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:我喜欢AtomineerUtils和VisualAssistX(尤其是合并时!: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)
它执行深层复制(在包含的对象上).
因此,所有包含的元素都将复制到新容器中.
但由于你的容器包含指针,
std::queue<Event*> eventQueue;
Run Code Online (Sandbox Code Playgroud)
它只是复制指针Event*(因为这是包含的对象).在这种情况下,容器元素指向的对象不会被复制..
| 归档时间: |
|
| 查看次数: |
1954 次 |
| 最近记录: |