Doe*_*Doe 4 c++ variables methods scope class
我正在尝试学习C++,根据我的理解,如果变量超出范围,那么它就会被销毁并重新分配其内存.如果我有一个类并且它的方法创建了一个变量,那么在方法调用之后不应该销毁该变量吗?例如:
class TestClass {
public:
struct Pair{
std::string name;
int value;
};
void addPair() {
//should be deleted after push_back is called?
Pair x = Pair{ std::string{ "Test Object " }, counter++ };
pairs.push_back(x);
}
void printPairs() {
for (int i = 0; i < pairs.size(); i++) {
std::cout << "pair { " << pairs[i].name << " : " << pairs[i].value << " } " << std::endl;
}
}
void removePair() {
pairs.pop_back();
}
private:
int counter;
std::vector<Pair> pairs;
};
Run Code Online (Sandbox Code Playgroud)
但是,当我试图addPair()再printPairs()然后removePair()它工作正常.为什么不抛出错误说无效访问内存位置?
你说:
根据我的理解,如果变量超出范围,那么它将被销毁并重新分配其内存.
那是正确的."重新分配"不是我会使用的正确单词.我会将其表达为:对象使用的内存可供其他对象使用.
然后你问:
如果我有一个类并且它的方法创建了一个变量,那么在方法调用之后不应该销毁该变量吗?
那是正确的.
但是,你的情况有所不同.
当你使用:
pairs.push_back(x);
Run Code Online (Sandbox Code Playgroud)
x放入的副本pairs.pairs函数返回后,副本继续存在.因此,printPairs()和removePair()工作得很好.
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |