类成员是可以分配在栈中的,依然可以返回这些成员的引用,不会执行复制操作。
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