类成员分配在栈中

浏览:1052 发布日期:2023-06-17 14:48:43

类成员是可以分配在栈中的,依然可以返回这些成员的引用,不会执行复制操作。

class AName
{
private:
    int age;
public:
    AName(int _age) : age(_age)
    {
        std::cout << "执行AName构造函数" << std::endl;
    }

    AName(const AName& n)
    {
        age = n.age;
        std::cout << "执行复制构造函数" << std::endl;
    }

    AName& operator=(const AName& n)
    {
        std::cout << "执行operator=方法" << std::endl;
        return *(new AName(n.age));
    }
};

class People
{
private:
    AName aname;

public:
    People(int age) : aname(AName(age))
    {
    }

    ~People()
    {
        std::cout << "~People销毁" << std::endl;
        delete &aname;
    }

    AName& getAName()
    {
        std::cout << "aname的地址: " << &aname << std::endl;
        return aname;
    }
};

int main()
{
    People p = People(33);
    AName& n2 = p.getAName();

    std::cout << "n2的地址:" << &n2 << std::endl;
    std::cin.get();

    return 0;
}

控制台输出:

执行AName构造函数
aname的地址: 004FF6F0
n2的地址:004FF6F0