我认为最好用我刚写的一个小代码片段来问这个问题:
#include <iostream>
using namespace std;
class BasicClass
{
public:
BasicClass()
{
}
void print()
{
cout << "I'm printing" << endl;
}
};
class FriendlyClass
{
public:
FriendlyClass(BasicClass& myFriend) :
_myFriend(myFriend)
{
}
void printFriend()
{
cout << "Printing my friend: ";
_myFriend.print();
}
private:
BasicClass& _myFriend;
};
int main(int argv, char** argc)
{
FriendlyClass* fc;
{
BasicClass bc;
fc = new FriendlyClass(bc);
fc->printFriend();
}
fc->printFriend();
delete fc;
return 0;
}
使用g++编译和运行代码一切正常:
$ g++ test.cc -o test
$ ./test
Printing my friend: I'm printing
Printing my friend: I'm printing
然而,这不是我所期望的行为。我期望在第二次调用fc->printFriend()
时会出现某种故障。我的关于通过引用传递/存储的理解有误吗?还是说这只是在小规模应用中有效,但在更复杂的应用中可能会失败?
std::shared_ptr<BasicClass>
并在堆上创建对象。 - fredoverflowunique_ptr
、shared_ptr
和weak_ptr
在我的代码中,我很享受没有内存泄漏的好处 :) - Corey D