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

Реализовал shared pointer class. В каких местах можно улучшить ? - C++

Восстановить пароль Регистрация
 
TonyM
1 / 1 / 0
Регистрация: 14.07.2011
Сообщений: 7
28.01.2012, 20:51     Реализовал shared pointer class. В каких местах можно улучшить ? #1
Изучаю с++, реализовал класс shared pointer(разумеется не в полной мере), хотелось бы услышать совета от людей более хорошо разбирающихся в с++, что можно было бы улучшить в имеющейся реализации.
Собственно код:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "shared_ptr.h"
 
int main()
{
    {
        shared_ptr p1 = new Someclass();
        shared_ptr p2 = new Someclass();
 
        std::cout << p1->showA() << "\n";
        std::cout << (*p1).showA() << "\n";
 
        std::cout << p2->showA() << "\n";
        std::cout << (*p2).showA() << "\n";
    }
    system("pause");
    return 0;
}

shared_ptr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef SHARED_PTR_H
#define SHARED_PTR_H
#include "storage.h"
class shared_ptr
{
    private:
        storage* ptr;
    public:
        shared_ptr (Someclass* pointer);
        ~shared_ptr ();
//      int getValue ();
        Someclass* operator-> ();
        Someclass& operator* ();
};
#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
#include "shared_ptr.h"
 
shared_ptr::shared_ptr(Someclass* pointer)
{
    std::cout << "going into scope. creating shared pointer...\n" ;
    this->ptr = new storage(pointer);
}
 
shared_ptr::~shared_ptr()
{
    std::cout << "going out of scope. deleting shared pointer...\n" ;
    delete this->ptr;
}
 
Someclass* shared_ptr::operator-> ()
{
    std::cout << "operator '->' in class shared_ptr used...\n" ;
    return this->ptr->getObjectByPointer();
}
 
Someclass& shared_ptr::operator* ()
{
    std::cout << "operator '*' in class shared_ptr used...\n" ;
    return this->ptr->getObjectByLink();
}

someclass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef SOME_CLS_H
#define SOME_CLS_H
#include <iostream>
class Someclass
{
    private:
        int a;
    public:
        Someclass ();
        int showA ();
};
#endif

someclass.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "some_cls.h"
Someclass::Someclass ()
{
    this->a = 10;
}
 
int Someclass::showA ()
{
    return this->a;
}

storage.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef STORAGE_H
#define STORAGE_H
#include "some_cls.h"
class storage
{
    private:
        Someclass *p;
        static int counter;
    public:
        storage(Someclass *pointer);
        ~storage();
        int getLinkCount();
        bool isNull();
        Someclass* getObjectByPointer();
        Someclass& getObjectByLink();
};
#endif

storage.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
34
35
36
37
38
39
40
41
42
43
44
#include "storage.h"
 
storage::storage(Someclass *pointer)
{
    if(this->isNull())
    {
        this->p = pointer;
    }
    ++storage::counter;
    std::cout << "Now we have "<< storage::counter << " links to Someclass\n";
}
 
storage::~storage()
{
    --storage::counter;
    std::cout << "Now we have "<< storage::counter << " links to Someclass\n";
    if(counter == 0)
    {
        std::cout << "Deleting pointer to Someclass\n";
        delete this->p;
    }
}
 
int storage::counter = 0;
 
bool storage::isNull()
{
    if(this->p)
    {
        return false;
    }
 
    return true;
}
 
Someclass* storage::getObjectByPointer()
{
    return this->p;
}
 
Someclass& storage::getObjectByLink()
{
    return *this->p;
}


Ну и архив:
Вложения
Тип файла: rar shared_ptr.rar (1.9 Кб, 13 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2012, 20:51     Реализовал shared pointer class. В каких местах можно улучшить ?
Посмотрите здесь:

Как вообще работают fstream.open(), class.pointer to massive? C++
Чем можно улучшить прогу!Дополните) C++
C++ Создание матричной алгебры, что можно улучшить в коде?
литература shared objects & dynamic shared objects C++
C++ Игра в камень,ножницы бумага.Что можно улучшить\оптимизировать?
delete[] *pointer vs. delete pointer и утечка памяти C++
Парсер математических выражений - можно ли оптимизировать и улучшить код C++
C++ Десять сортировок. Четыре реализовал, подскажите, какие еще есть?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
29.01.2012, 00:41     Реализовал shared pointer class. В каких местах можно улучшить ? #2
0. Сделайте же шаблонный класс.
1. Первый же вышедший из области видимости объект уничтожит указатель.
2. Нет оператора присваивания и конструктора копирования, что означает, что объект может быть скопирован обычным способом. Плохо -- пункт 1.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.01.2012, 01:10     Реализовал shared pointer class. В каких местах можно улучшить ? #3
1. это не шаред поинтер. с смысле не тот, который теперь в стандарте или в бусте.
2. это должен быть шаблонный класс.
Пока вы это не исправите, остальное комментировать нет смысла, потому что под эти два пункта переделать придется все, что вы уже написали.

Реализуйте для начала какой-нибудь смарт поинтер попроще
scoped_ptr
unique_ptr
auto_ptr

Вот тут небольшой обзорчик:
http://www.rsdn.ru/article/cpp/smartptr.xml
Yandex
Объявления
29.01.2012, 01:10     Реализовал shared pointer class. В каких местах можно улучшить ?
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru