【发布时间】:2020-05-31 14:10:21
【问题描述】:
复制构造函数永远不会被调用(我使用带有 -std=c++11 的 g++):
指针.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:
#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();
}
我查看了这里提出的其他类似问题,但没有一个有效。
复制构造函数应该是ClassName(const ClassName &other),对吧?
Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Aliquam lacinia mattis arcu, vitae interdum leo。 Praesent viverra, tortor a tincidunt ullamcorper, arcu urna finibus enim, congue dignissim tortor quam ut dui。 Ut eleifend suscipit ligula sagittis consequat。整数 semper orci eu metus mollis sodales。 Fusce sollicitudin elementum nisl,non congue odio lobortis non。 Duis tempus tristique nisi nec tempor。 Sed 在 ullamcorper nisi。 Suspendisse id suscipit magna, eu pellentesque ligula。 Nullam aliquam pretium tellus, eget venenatis eros pharetra finibus。
【问题讨论】:
-
e0 = sharedEntity;调用复制赋值运算符,而不是复制构造函数。此行没有构建新实例。 -
不知道我怎么没看到。谢谢。
标签: c++ oop templates copy copy-constructor