[英]Why is the copy constructor of this template class not getting called?
The copy constructor never gets called (I'm using g++ with -std=c++11):复制构造函数永远不会被调用(我使用 g++ 和 -std=c++11):
pointers.cpp:指针.cpp:
#include <iostream>
template <typename T>
class SharedPtr
{
private:
int *m_Count;
T *m_Ptr;
public:
SharedPtr(T *ptr = nullptr)
: m_Count(new int), m_Ptr(ptr)
{
*m_Count = 1;
}
SharedPtr(const SharedPtr &other)
: m_Count(other.m_Count), m_Ptr(other.m_Ptr)
{
std::cout << "Copied: " << *m_Count << std::endl;
(*m_Count)++;
}
~SharedPtr()
{
(*m_Count)--;
if (*m_Count == 0)
{
delete m_Ptr;
delete m_Count;
}
}
T &operator*()
{
return *m_Ptr;
}
};
main.cpp:主.cpp:
#include "pointers.cpp"
#include <iostream>
class Entity
{
public:
Entity()
{
std::cout << "Entity created!" << std::endl;
}
~Entity()
{
std::cout << "Entity destroyed!" << std::endl;
}
};
int main(int argc, char *argv[])
{
{
SharedPtr<Entity> e0;
std::cin.get();
{
SharedPtr<Entity> sharedEntity = new Entity();
std::cin.get();
e0 = sharedEntity;
std::cin.get();
}
std::cin.get();
}
std::cin.get();
}
I looked at other similar questions asked here, but none of them worked.我查看了此处提出的其他类似问题,但没有一个有效。 The copy constructor should be
ClassName(const ClassName &other)
, right?复制构造函数应该是
ClassName(const ClassName &other)
,对吧?
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit。 Aliquam lacinia mattis arcu, vitae interdum leo.
Aliquam lacinia mattis arcu, vitae interdum leo。 Praesent viverra, tortor a tincidunt ullamcorper, arcu urna finibus enim, congue dignissim tortor quam ut dui.
Praesent viverra, tortor a tincidunt ullamcorper, arcu urna finibus enim, congue dignissim tortor quam ut dui。 Ut eleifend suscipit ligula sagittis consequat.
Ut eleifend suscipit ligula sagittis consequat。 Integer semper orci eu metus mollis sodales.
Integer semper orci eu metus mollis sodales。 Fusce sollicitudin elementum nisl, non congue odio lobortis non.
Fusce sollicitudin elementum nisl,non congue odio lobortis non。 Duis tempus tristique nisi nec tempor.
Duis tempus tristique nisi nec tempor。 Sed in ullamcorper nisi.
Sed 在 ullamcorper nisi。 Suspendisse id suscipit magna, eu pellentesque ligula.
Suspendisse id suscipit magna, eu pellentesque ligula。 Nullam aliquam pretium tellus, eget venenatis eros pharetra finibus.
Nullam aliquam pretium tellus, eget venenatis eros pharetra finibus。
None of the code in main()
calls the copy contructor of SharedPtr
: main()
中的任何代码都没有调用SharedPtr
的复制构造函数:
SharedPtr<Entity> e0;
calls SharedPtr(T *ptr = nullptr)
SharedPtr(T *ptr = nullptr)
SharedPtr<Entity> sharedEntity = new Entity();
calls SharedPtr(T *ptr = nullptr)
SharedPtr(T *ptr = nullptr)
e0 = sharedEntity;
calls operator=()
which is not defined in your SharedPtr
SharedPtr
中定义的operator=()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.