Форум программистов, компьютерный форум CyberForum.ru

Shared_ptr собственная реализация - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Какую пользу принесет теория? http://www.cyberforum.ru/cpp-beginners/thread943856.html
Изучаю С++ с нуля. Просмотрел первый видеоурок, но нет возможности скачать компилятор. Принесет ли пользу изучение только теории?
C++ В чем отличия между выражением (expression) и оперетором (statement)? Здравствуйте, скажите пожалуйста в чем отличия между выражением и оператором? Если x=100 это выражение, то x=100; оператор? Тогда получается что оператор=выражения+; Но зачем тогда разделять эти понятия, если выражения отличается от оператора только точкой с запятой. http://www.cyberforum.ru/cpp-beginners/thread943813.html
C++ аналог типа strinng pascal в c++
Подскажите какой тип в си++ соответствует типу string в паскале
C++ Значение переменной типа int
Я хочу присвоить переменной типа int значение 2147483648, а в gdb я посмотрел значение переменной и оно оказалось равным -2147483648, в чем причина?
C++ Заполнить двумерный массив по правилу http://www.cyberforum.ru/cpp-beginners/thread943749.html
заполнить двумерный массив следуюшим образом: 1000001 0100001 0010100 0001000 0010100 0100010 1000001
C++ дайте задание по структурам и указателям Ребят, дайте задание по структурам и указателям:) подробнее

Показать сообщение отдельно
imamatory
1 / 1 / 0
Регистрация: 25.11.2011
Сообщений: 11
26.08.2013, 15:27     Shared_ptr собственная реализация
Здравствуйте, написал собственную реалицацию "умных" указателей для класса object. Прежде чем попробовать написать шаблонную версию хочу удостовериться, что нет утечек памяти и прочих ошибок. Буду благодарен за всевозможную критику. Заранее спасибо.

shared_ptr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef SHARED_PTR_H
#define SHARED_PTR_H
 
#include<iostream>
 
class object
{
    int smth;
};
 
class shared_ptr
{
    object* pObj;
    static int count; //счетчик указателей на pObj
public:
    shared_ptr(object* myObj);
    shared_ptr(const shared_ptr &myObj);
    ~shared_ptr();
    shared_ptr& operator=(shared_ptr &myObj);
};
 
 
#endif


shared_ptr.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include"shared_ptr.h"
 
int shared_ptr::count=0;
 
shared_ptr::shared_ptr(object* myObj)
{
    pObj=myObj; 
};
shared_ptr::shared_ptr(const shared_ptr &myObj)
{
    shared_ptr p1 = new object();
    p1.pObj = myObj.pObj;
    count++;
};
 
shared_ptr::~shared_ptr()
{
    if(count==1)//если имеется только один указатель на объект, то чистим память
    {
        delete pObj;
        count = 0;
        printf("Another crash\n");
    }
    else 
        pObj = NULL;
        count--;
};
 
shared_ptr& shared_ptr::operator=(shared_ptr &myObj)
{
    count++;
    return myObj;
}


main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include"shared_ptr.h"
using namespace std;
 
void foo(shared_ptr ob)
{
    shared_ptr ob2=ob;
}
 
int main()
{
    shared_ptr p1=new object();
    shared_ptr p2 = p1;
    foo(p2);
    
    return 0;
}
Вложения
Тип файла: rar shared_ptr.rar (874 байт, 9 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru