Pointers
Dynamic Allocation
new creates an object dynamically, and delete releases it.
delete
Every object created with `new` should be released with `delete` when it is no longer needed.
Dynamic Allocation
dynamic_allocation.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
int main() {
int start = 6;
int step = 2;
int* number = new int(start);
*number += step;
std::cout << "value=" << *number << std::endl;
delete number;
number = nullptr;
std::cout << "released=" << (number == nullptr) << std::endl;
return 0;
}
#include <iostream>
int main() {
int start = 3;
int step = 2;
int* number = new int(start);
*number += step;
std::cout << "value=" << *number << std::endl;
delete number;
number = nullptr;
std::cout << "released=" << (number == nullptr) << std::endl;
return 0;
}
#include <iostream>
int main() {
int start = 10;
int step = 2;
int* number = new int(start);
*number += step;
std::cout << "value=" << *number << std::endl;
delete number;
number = nullptr;
std::cout << "released=" << (number == nullptr) << std::endl;
return 0;
}
#include <iostream>
int main() {
int start = 6;
int step = 1;
int* number = new int(start);
*number += step;
std::cout << "value=" << *number << std::endl;
delete number;
number = nullptr;
std::cout << "released=" << (number == nullptr) << std::endl;
return 0;
}
#include <iostream>
int main() {
int start = 6;
int step = 4;
int* number = new int(start);
*number += step;
std::cout << "value=" << *number << std::endl;
delete number;
number = nullptr;
std::cout << "released=" << (number == nullptr) << std::endl;
return 0;
}
start ← 6, step ← 2, number ← ⟨addr A⟩
3int main() {4 int start→ 6 = 6; //@start=3, 105 int step→ 2 = 2; //@step=1, 46 int* number→ ⟨addr A⟩ = new int(start);78 *number⟨addr A⟩ += step2;910 std::cout << "value=" << *number⟨addr A⟩ << std::endl;1112 delete number;13 number→ 0 = nullptr;1415 std::cout << "released=" << (number0 == nullptr) << std::endl;16 return 0;17}outputvalue=8 released=1
start ← 3, step ← 2, number ← ⟨addr A⟩
3int main() {4 int start→ 3 = 3;5 int step→ 2 = 2;6 int* number→ ⟨addr A⟩ = new int(start);78 *number⟨addr A⟩ += step2;910 std::cout << "value=" << *number⟨addr A⟩ << std::endl;1112 delete number;13 number→ 0 = nullptr;1415 std::cout << "released=" << (number0 == nullptr) << std::endl;16 return 0;17}outputvalue=5 released=1
start ← 10, step ← 2, number ← ⟨addr A⟩
3int main() {4 int start→ 10 = 10;5 int step→ 2 = 2;6 int* number→ ⟨addr A⟩ = new int(start);78 *number⟨addr A⟩ += step2;910 std::cout << "value=" << *number⟨addr A⟩ << std::endl;1112 delete number;13 number→ 0 = nullptr;1415 std::cout << "released=" << (number0 == nullptr) << std::endl;16 return 0;17}outputvalue=12 released=1
start ← 6, step ← 1, number ← ⟨addr A⟩
3int main() {4 int start→ 6 = 6;5 int step→ 1 = 1;6 int* number→ ⟨addr A⟩ = new int(start);78 *number⟨addr A⟩ += step1;910 std::cout << "value=" << *number⟨addr A⟩ << std::endl;1112 delete number;13 number→ 0 = nullptr;1415 std::cout << "released=" << (number0 == nullptr) << std::endl;16 return 0;17}outputvalue=7 released=1
start ← 6, step ← 4, number ← ⟨addr A⟩
3int main() {4 int start→ 6 = 6;5 int step→ 4 = 4;6 int* number→ ⟨addr A⟩ = new int(start);78 *number⟨addr A⟩ += step4;910 std::cout << "value=" << *number⟨addr A⟩ << std::endl;1112 delete number;13 number→ 0 = nullptr;1415 std::cout << "released=" << (number0 == nullptr) << std::endl;16 return 0;17}outputvalue=10 released=1