impedindo passar como parâmetro

13 views
Skip to first unread message

Canellas

unread,
May 13, 2013, 9:47:15 PM5/13/13
to ccppbrasil
Olá,

O assunto poderia ser: 'como garantir que objetos só existam localmente em uma fç?'

Para isso, eu queria impedir que objetos de uma classe fossem passados como parâmetros, seja por valor (esse eu consegui), por & ou por std::move, garantindo (eu acho) q só existam locais em uma fç.

Exemplificando:

class A {
public:
    A() {}
    A(const A &) = delete;
    A(A &&) = delete;

    A & operator =(const A & ) = delete;
    A & operator =( A && ) = delete;
};

void f( A & a ) {...}
void g( A && a ) {...}
void h( A a ){...}

.
.
.
A a;
f(a);
g(std::move(a));
h(a);


'h' não vai compilar, mas 'f' e 'g' compilam (e funcionam). Eu queria que 'f' e 'g' nem compilassem.

Eu tentei achar como  sobrescever o 'operador &' como deleted, mas não deu em nada.

'Tô viajando ou existe como fazer isso?



    Rodrigo Canellas

    -----------
    Programador C++
    Fotógrafo amador
 


Rodrigo Madera

unread,
May 13, 2013, 10:57:39 PM5/13/13
to ccppb...@googlegroups.com
Rapaz... de longe, os requisitos mais estranhos que já vi, são os teus, rs.

Nunca vi ninguém fazer isso, e tenho minhas dúvidas que seja possível. Se o cara for determinado, ele conseguirá o endereço do teu amado e irá utilizar.

Tentou retornar "lixo" no operador &?

Enfim, boa sorte em mais uma "empreitada do além" em C++, rs.

Mx



2013/5/13 Canellas <rodrigo....@gmail.com>

--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
 
 
 

Rodrigo Madera

unread,
May 13, 2013, 11:04:44 PM5/13/13
to ccppb...@googlegroups.com
Só lembrando que mesmo com operador customizado, me parece que este continuará sendo teu inimigo:

reinterpret_cast<A*>(&reinterpret_cast<char&>(obj));

Mx


2013/5/13 Rodrigo Madera <rodrigo...@gmail.com>

Уθя¡ςκ

unread,
May 14, 2013, 12:36:11 AM5/14/13
to ccppb...@googlegroups.com
Tente ver o que você está querendo fazer fora do contexto de passagem de parâmetros que talvez fique mais explicito e clara a impossibilidade. Um parâmetro referência é uma referência, então, você conseguiria impedir que sejam criadas simples referências para objetos de suas classes? Você consegue impedir que o programador crie um ponteiro que aponte para objetos da sua classe? Isso, é independente do construtores de cópia, que servem na criação de objetos da sua classe, mas não dizem nada a respeito dos derivados (referencias, ponteiros, arrays, ...).
Reply all
Reply to author
Forward
0 new messages