koala написав:incred написав:Чи можна, в даному випадку, назвати delete деструктором?
Звісно ні, з якого це дива? Деструктор - це особливий член, що викликається при знищенні об'єкту. Звідкіля члени в стандартного вказівника? І як стандартна функція може раптом стати членом класу?
Ви мене неправильно зрозуміли: чи буде виконуватися операція delete, чи залишиться пам'ять зайнятою при знищенні самого об'єкту типу pair?
koala написав:incred написав:Якщо я буду використовувати std::pair як boost::tr1::shared_ptr, протікання не буде?
Якщо ви будете використовувати літак як підводний човен, протікання не буде? Чи ви щось інше хотіли спитати?
Тут я мав на увазі, чи є у цих класів схожа функція, а в загальному вигляді так: як знищуються вказівники опосередковано.
А щодо цього, то я знайшов відповідь таким прикладом.
Ось:
#include <iostream>
#include <utility>
#include <conio.h>
using namespace std;
class a {
static int total;
int id;
public:
a(): id(total++) {
cout<<"An a-objrct was created! its index: "<<id<<endl;
}
a(const a& i): id(total++) {
cout<<"The a-object with index "<<i.id
<<" has been successfully copied!"<<endl;
}
~a() {
cout<<"The a-object with index "<<id
<<" has been successfully destroyed!"<<endl;
}
};
int a::total = 1;
int main() {
a* x = new a;
cout<<"pointer is created"<<endl;
_getch();
pair<a*, a>* p1 = new pair<a*, a>(x, *x);
delete p1;
_getch();
return 0;
}
Результат програми такий:
An a-objrct was created! its index: 1
pointer is created
The a-object with index 1 has been successfully copied!
The a-object with index 2 has been successfully destroyed!