C++ 向量<;共享\u ptr<;X>&燃气轮机;正在复制调用的-X构造函数?
我有一个C++ 向量<;共享\u ptr<;X>&燃气轮机;正在复制调用的-X构造函数?,c++,c++11,vector,shared-ptr,C++,C++11,Vector,Shared Ptr,我有一个std::vector 我正在研究MSVC向量复制构造函数的实现。我可以看到向量迭代源向量并复制每个元素的位置。我可以看到调用placement new和调用shared_ptr构造函数的位置,但是我看不到调用classX的构造函数。我正在调试代码,但我从未从类X中找到任何构造函数 肯定在某个时候需要X的复制构造函数?还是我错了 如果我们有代码: 我们希望X的构造函数调用一次,而X的复制和移动构造函数调用零次 为什么? 我们从不移动或复制X。我们移动和/或复制一个共享\u ptr,其中可
std::vector
我正在研究MSVC向量复制构造函数的实现。我可以看到向量迭代源向量并复制每个元素的位置。我可以看到调用placement new和调用shared_ptr构造函数的位置,但是我看不到调用classX
的构造函数。我正在调试代码,但我从未从类X中找到任何构造函数
肯定在某个时候需要X的复制构造函数?还是我错了 如果我们有代码:
我们希望X
的构造函数调用一次,而X
的复制和移动构造函数调用零次
为什么?
我们从不移动或复制X
。我们移动和/或复制一个共享\u ptr
,其中可能包含指向X
的指针。复制指向X
的指针不需要复制对象
X *obj = new X;
X *ptr_copy = obj;
那里也没有调用X的复制构造函数。如果我们有代码:
我们希望X
的构造函数调用一次,而X
的复制和移动构造函数调用零次
为什么?
我们从不移动或复制X
。我们移动和/或复制一个共享\u ptr
,其中可能包含指向X
的指针。复制指向X
的指针不需要复制对象
X *obj = new X;
X *ptr_copy = obj;
也没有调用X的复制构造函数。共享的ptr的所有副本都指向同一个对象X。当创建的共享的ptr的新副本X没有被复制时。
shared_ptr统计其副本的数量,并在删除共享_ptr的最后一个副本时删除对象。共享_ptr的所有副本都指向同一个对象X。当创建的共享_ptr的新副本X未被复制时。
shared_ptr统计其副本数,并在删除共享_ptr的最后一个副本时删除对象。当为包含共享_ptr元素的std::vector执行副本构造函数时,它将增加共享_ptr对象内的计数器。它不会创建一个新的X对象,而是使用shared_ptr中的计数器增加共享对象的数量。因此,当您为包含共享\u ptr元素的std::vector执行复制构造函数时,将不会看到执行X的构造函数,它将增加共享\u ptr对象中的计数器。它不会创建一个新的X对象,而是使用shared_ptr中的计数器增加共享对象的数量。因此,您将不会看到X的构造函数的执行,我想知道这是否是因为shared_ptr已经包含了“数据”。谢谢。我想知道是不是因为共享的ptr已经包含了“数据”。谢谢。共享指针别名为它们的指针对象:指针的所有副本都指向同一个对象。它不是克隆或深度复制指针。这真的相当邪恶;小心使用!共享指针将其指针对象别名为:指针的所有副本都指向同一对象。它不是克隆或深度复制指针。这真的相当邪恶;小心使用!
X *obj = new X;
X *ptr_copy = obj;