为什么这个模板 class 的复制构造函数没有被调用?

Why is the copy constructor of this template class not getting called?

永远不会调用复制构造函数(我正在使用 g++ 和 -std=c++11):
pointers.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();
}

我查看了此处提出的其他类似问题,但其中 none 有效。 拷贝构造函数应该是ClassName(const ClassName &other)吧?

事实是痛苦本身很重要,它会被肥胖的精英所追求。弓属性的一些lacinia,有时是生命的时间。 Praesent viverra, tortor a tincidunt ullamcorper, arcu urn finnibus, congue dignissim tortor quam ut dui.作为一个精灵,他拿起了一系列小箭。整个团队总是害怕足球。 Fusce sollicitudin element nisl,没有作业就没有仇恨政策。你有悲伤的时候,但不是时候。但只是在子宫里。这需要很多关注,这是一支伟大的足球队。土地是无价的,它需要大地的毒药和边界的颤抖

None main() 中的代码调用了 SharedPtr 的复制构造函数:

  • SharedPtr<Entity> e0; 呼叫 SharedPtr(T *ptr = nullptr)
  • SharedPtr<Entity> sharedEntity = new Entity(); 呼叫 SharedPtr(T *ptr = nullptr)
  • e0 = sharedEntity; 调用 operator=(),这在您的 SharedPtr
  • 中未定义